1 /* 2 * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javax.xml.stream; 27 28 import javax.xml.namespace.NamespaceContext; 29 import javax.xml.namespace.QName; 30 31 /** 32 * The XMLStreamReader interface allows forward, read-only access to XML. 33 * It is designed to be the lowest level and most efficient way to 34 * read XML data. 35 * 36 * <p> 37 * The XMLStreamReader is designed to iterate over XML using 38 * next() and hasNext(). The data can be accessed using methods such as getEventType(), 39 * getNamespaceURI(), getLocalName() and getText(); 40 * 41 * <p> 42 * An XMLStreamReader instance is created with an initial event type START_DOCUMENT. 43 * At any moment in time, it has a current event that the methods of the interface 44 * access and may load the next event through the {@link #next() next()} method. 45 * The current event type can be determined by {@link #getEventType getEventType()}, and 46 * the next returned by the {@link #next() next()} method. 47 * 48 * <p> 49 * Parsing events are defined as the XML Declaration, a DTD, 50 * start tag, character data, white space, end tag, comment, 51 * or processing instruction. An attribute or namespace event may be encountered 52 * at the root level of a document as the result of a query operation. 53 * 54 * <p> 55 * For XML 1.0 compliance an XML processor must pass the 56 * identifiers of declared unparsed entities, notation declarations and their 57 * associated identifiers to the application. This information is 58 * provided through the property API on this interface. 59 * The following two properties allow access to this information: 60 * javax.xml.stream.notations and javax.xml.stream.entities. 61 * When the current event is a DTD the following call will return a 62 * list of Notations 63 * {@code List l = (List) getProperty("javax.xml.stream.notations");} 64 * The following call will return a list of entity declarations: 65 * {@code List l = (List) getProperty("javax.xml.stream.entities");} 66 * These properties can only be accessed during a DTD event and 67 * are defined to return null if the information is not available. 68 * 69 * <p> 70 * The following table describes which methods are valid in what state. 71 * If a method is called in an invalid state the method will throw a 72 * java.lang.IllegalStateException. 73 * 74 * <table class="striped"> 75 * <caption>Valid methods for each state</caption> 76 * <thead> 77 * <tr> 78 * <th scope="col">Event Type</th> 79 * <th scope="col">Valid Methods</th> 80 * </tr> 81 * </thead> 82 * <tbody> 83 * <tr> 84 * <th scope="row"> All States </th> 85 * <td> getProperty(), hasNext(), require(), close(), 86 * getNamespaceURI(), isStartElement(), 87 * isEndElement(), isCharacters(), isWhiteSpace(), 88 * getNamespaceContext(), getEventType(),getLocation(), 89 * hasText(), hasName() 90 * </td> 91 * </tr> 92 * <tr> 93 * <th scope="row"> START_ELEMENT </th> 94 * <td> next(), getName(), getLocalName(), hasName(), getPrefix(), 95 * getAttributeXXX(), isAttributeSpecified(), 96 * getNamespaceXXX(), 97 * getElementText(), nextTag() 98 * </td> 99 * </tr> 100 * <tr> 101 * <th scope="row"> ATTRIBUTE </th> 102 * <td> next(), nextTag() 103 * getAttributeXXX(), isAttributeSpecified(), 104 * </td> 105 * </tr> 106 * <tr> 107 * <th scope="row"> NAMESPACE </th> 108 * <td> next(), nextTag() 109 * getNamespaceXXX() 110 * </td> 111 * </tr> 112 * <tr> 113 * <th scope="row"> END_ELEMENT </th> 114 * <td> next(), getName(), getLocalName(), hasName(), getPrefix(), 115 * getNamespaceXXX(), nextTag() 116 * </td> 117 * </tr> 118 * <tr> 119 * <th scope="row"> CHARACTERS </th> 120 * <td> next(), getTextXXX(), nextTag() </td> 121 * </tr> 122 * <tr> 123 * <th scope="row"> CDATA </th> 124 * <td> next(), getTextXXX(), nextTag() </td> 125 * </tr> 126 * <tr> 127 * <th scope="row"> COMMENT </th> 128 * <td> next(), getTextXXX(), nextTag() </td> 129 * </tr> 130 * <tr> 131 * <th scope="row"> SPACE </th> 132 * <td> next(), getTextXXX(), nextTag() </td> 133 * </tr> 134 * <tr> 135 * <th scope="row"> START_DOCUMENT </th> 136 * <td> next(), getEncoding(), getVersion(), isStandalone(), standaloneSet(), 137 * getCharacterEncodingScheme(), nextTag()</td> 138 * </tr> 139 * <tr> 140 * <th scope="row"> END_DOCUMENT </th> 141 * <td> close()</td> 142 * </tr> 143 * <tr> 144 * <th scope="row"> PROCESSING_INSTRUCTION </th> 145 * <td> next(), getPITarget(), getPIData(), nextTag() </td> 146 * </tr> 147 * <tr> 148 * <th scope="row"> ENTITY_REFERENCE </th> 149 * <td> next(), getLocalName(), getText(), nextTag() </td> 150 * </tr> 151 * <tr> 152 * <th scope="row"> DTD </th> 153 * <td> next(), getText(), nextTag() </td> 154 * </tr> 155 * </tbody> 156 * </table> 157 * 158 * @version 1.0 159 * @author Copyright (c) 2009 by Oracle Corporation. All Rights Reserved. 160 * @see javax.xml.stream.events.XMLEvent 161 * @see XMLInputFactory 162 * @see XMLStreamWriter 163 * @since 1.6 164 */ 165 public interface XMLStreamReader extends XMLStreamConstants { 166 /** 167 * Get the value of a feature/property from the underlying implementation 168 * @param name The name of the property, may not be null 169 * @return The value of the property 170 * @throws IllegalArgumentException if name is null 171 */ 172 public Object getProperty(java.lang.String name) throws java.lang.IllegalArgumentException; 173 174 /** 175 * Get next parsing event - a processor may return all contiguous 176 * character data in a single chunk, or it may split it into several chunks. 177 * If the property javax.xml.stream.isCoalescing is set to true 178 * element content must be coalesced and only one CHARACTERS event 179 * must be returned for contiguous element content or 180 * CDATA Sections. 181 * 182 * By default entity references must be 183 * expanded and reported transparently to the application. 184 * An exception will be thrown if an entity reference cannot be expanded. 185 * If element content is empty (i.e. content is "") then no CHARACTERS event will be reported. 186 * 187 * <p>Given the following XML:<br> 188 * {@code <foo><!--description-->content text<![CDATA[<greeting>Hello>/greeting>]]>other content>/foo>}<br> 189 * The behavior of calling next() when being on foo will be:<br> 190 * 1- the comment (COMMENT)<br> 191 * 2- then the characters section (CHARACTERS)<br> 192 * 3- then the CDATA section (another CHARACTERS)<br> 193 * 4- then the next characters section (another CHARACTERS)<br> 194 * 5- then the END_ELEMENT<br> 195 * 196 * <p><b>NOTE:</b> empty element (such as {@code <tag/>}) will be reported 197 * with two separate events: START_ELEMENT, END_ELEMENT - This preserves 198 * parsing equivalency of empty element to {@code <tag></tag>}. 199 * 200 * @see javax.xml.stream.events.XMLEvent 201 * @return the integer code corresponding to the current parse event 202 * @throws java.util.NoSuchElementException if this is called when hasNext() returns false 203 * @throws XMLStreamException if there is an error processing the underlying XML source 204 */ 205 public int next() throws XMLStreamException; 206 207 /** 208 * Test if the current event is of the given type and if the namespace and name match the current 209 * namespace and name of the current event. If the namespaceURI is null it is not checked for equality, 210 * if the localName is null it is not checked for equality. 211 * @param type the event type 212 * @param namespaceURI the uri of the event, may be null 213 * @param localName the localName of the event, may be null 214 * @throws XMLStreamException if the required values are not matched. 215 */ 216 public void require(int type, String namespaceURI, String localName) throws XMLStreamException; 217 218 /** 219 * Reads the content of a text-only element, an exception is thrown if this is 220 * not a text-only element. 221 * Regardless of value of javax.xml.stream.isCoalescing this method always returns coalesced content. 222 * <br> Precondition: the current event is START_ELEMENT. 223 * <br> Postcondition: the current event is the corresponding END_ELEMENT. 224 * 225 * <br>The method does the following (implementations are free to optimized 226 * but must do equivalent processing): 227 * <pre> 228 * if(getEventType() != XMLStreamConstants.START_ELEMENT) { 229 * throw new XMLStreamException( 230 * "parser must be on START_ELEMENT to read next text", getLocation()); 231 * } 232 * 233 * int eventType = next(); 234 * StringBuffer content = new StringBuffer(); 235 * while(eventType != XMLStreamConstants.END_ELEMENT) { 236 * if(eventType == XMLStreamConstants.CHARACTERS 237 * || eventType == XMLStreamConstants.CDATA 238 * || eventType == XMLStreamConstants.SPACE 239 * || eventType == XMLStreamConstants.ENTITY_REFERENCE) { 240 * buf.append(getText()); 241 * } else if(eventType == XMLStreamConstants.PROCESSING_INSTRUCTION 242 * || eventType == XMLStreamConstants.COMMENT) { 243 * // skipping 244 * } else if(eventType == XMLStreamConstants.END_DOCUMENT) { 245 * throw new XMLStreamException( 246 * "unexpected end of document when reading element text content", this); 247 * } else if(eventType == XMLStreamConstants.START_ELEMENT) { 248 * throw new XMLStreamException( 249 * "element text content may not contain START_ELEMENT", getLocation()); 250 * } else { 251 * throw new XMLStreamException( 252 * "Unexpected event type "+eventType, getLocation()); 253 * } 254 * eventType = next(); 255 * } 256 * return buf.toString(); 257 * </pre> 258 * 259 * @throws XMLStreamException if the current event is not a START_ELEMENT 260 * or if a non text element is encountered 261 */ 262 public String getElementText() throws XMLStreamException; 263 264 /** 265 * Skips any white space (isWhiteSpace() returns true), COMMENT, 266 * or PROCESSING_INSTRUCTION, 267 * until a START_ELEMENT or END_ELEMENT is reached. 268 * If other than white space characters, COMMENT, PROCESSING_INSTRUCTION, START_ELEMENT, END_ELEMENT 269 * are encountered, an exception is thrown. This method should 270 * be used when processing element-only content seperated by white space. 271 * 272 * <br> Precondition: none 273 * <br> Postcondition: the current event is START_ELEMENT or END_ELEMENT 274 * and cursor may have moved over any whitespace event. 275 * 276 * <br>Essentially it does the following (implementations are free to optimized 277 * but must do equivalent processing): 278 * <pre> {@code 279 * int eventType = next(); 280 * while((eventType == XMLStreamConstants.CHARACTERS && isWhiteSpace()) // skip whitespace 281 * || (eventType == XMLStreamConstants.CDATA && isWhiteSpace()) 282 * // skip whitespace 283 * || eventType == XMLStreamConstants.SPACE 284 * || eventType == XMLStreamConstants.PROCESSING_INSTRUCTION 285 * || eventType == XMLStreamConstants.COMMENT 286 * ) { 287 * eventType = next(); 288 * } 289 * if (eventType != XMLStreamConstants.START_ELEMENT && eventType != XMLStreamConstants.END_ELEMENT) { 290 * throw new String XMLStreamException("expected start or end tag", getLocation()); 291 * } 292 * return eventType; } 293 * </pre> 294 * 295 * @return the event type of the element read (START_ELEMENT or END_ELEMENT) 296 * @throws XMLStreamException if the current event is not white space, PROCESSING_INSTRUCTION, 297 * START_ELEMENT or END_ELEMENT 298 * @throws java.util.NoSuchElementException if this is called when hasNext() returns false 299 */ 300 public int nextTag() throws XMLStreamException; 301 302 /** 303 * Returns true if there are more parsing events and false 304 * if there are no more events. This method will return 305 * false if the current state of the XMLStreamReader is 306 * END_DOCUMENT 307 * @return true if there are more events, false otherwise 308 * @throws XMLStreamException if there is a fatal error detecting the next state 309 */ 310 public boolean hasNext() throws XMLStreamException; 311 312 /** 313 * Frees any resources associated with this Reader. This method does not close the 314 * underlying input source. 315 * @throws XMLStreamException if there are errors freeing associated resources 316 */ 317 public void close() throws XMLStreamException; 318 319 /** 320 * Return the uri for the given prefix. 321 * The uri returned depends on the current state of the processor. 322 * 323 * <p><strong>NOTE:</strong>The 'xml' prefix is bound as defined in 324 * <a href="http://www.w3.org/TR/REC-xml-names/#ns-using">Namespaces in XML</a> 325 * specification to "http://www.w3.org/XML/1998/namespace". 326 * 327 * <p><strong>NOTE:</strong> The 'xmlns' prefix must be resolved to following namespace 328 * <a href="http://www.w3.org/2000/xmlns/">http://www.w3.org/2000/xmlns/</a> 329 * @param prefix The prefix to lookup, may not be null 330 * @return the uri bound to the given prefix or null if it is not bound 331 * @throws IllegalArgumentException if the prefix is null 332 */ 333 public String getNamespaceURI(String prefix); 334 335 /** 336 * Returns true if the cursor points to a start tag (otherwise false) 337 * @return true if the cursor points to a start tag, false otherwise 338 */ 339 public boolean isStartElement(); 340 341 /** 342 * Returns true if the cursor points to an end tag (otherwise false) 343 * @return true if the cursor points to an end tag, false otherwise 344 */ 345 public boolean isEndElement(); 346 347 /** 348 * Returns true if the cursor points to a character data event 349 * @return true if the cursor points to character data, false otherwise 350 */ 351 public boolean isCharacters(); 352 353 /** 354 * Returns true if the cursor points to a character data event 355 * that consists of all whitespace 356 * @return true if the cursor points to all whitespace, false otherwise 357 */ 358 public boolean isWhiteSpace(); 359 360 361 /** 362 * Returns the normalized attribute value of the 363 * attribute with the namespace and localName 364 * If the namespaceURI is null the namespace 365 * is not checked for equality 366 * @param namespaceURI the namespace of the attribute 367 * @param localName the local name of the attribute, cannot be null 368 * @return returns the value of the attribute , returns null if not found 369 * @throws IllegalStateException if this is not a START_ELEMENT or ATTRIBUTE 370 */ 371 public String getAttributeValue(String namespaceURI, 372 String localName); 373 374 /** 375 * Returns the count of attributes on this START_ELEMENT, 376 * this method is only valid on a START_ELEMENT or ATTRIBUTE. This 377 * count excludes namespace definitions. Attribute indices are 378 * zero-based. 379 * @return returns the number of attributes 380 * @throws IllegalStateException if this is not a START_ELEMENT or ATTRIBUTE 381 */ 382 public int getAttributeCount(); 383 384 /** Returns the qname of the attribute at the provided index 385 * 386 * @param index the position of the attribute 387 * @return the QName of the attribute 388 * @throws IllegalStateException if this is not a START_ELEMENT or ATTRIBUTE 389 */ 390 public QName getAttributeName(int index); 391 392 /** 393 * Returns the namespace of the attribute at the provided 394 * index 395 * @param index the position of the attribute 396 * @return the namespace URI (can be null) 397 * @throws IllegalStateException if this is not a START_ELEMENT or ATTRIBUTE 398 */ 399 public String getAttributeNamespace(int index); 400 401 /** 402 * Returns the localName of the attribute at the provided 403 * index 404 * @param index the position of the attribute 405 * @return the localName of the attribute 406 * @throws IllegalStateException if this is not a START_ELEMENT or ATTRIBUTE 407 */ 408 public String getAttributeLocalName(int index); 409 410 /** 411 * Returns the prefix of this attribute at the 412 * provided index 413 * @param index the position of the attribute 414 * @return the prefix of the attribute 415 * @throws IllegalStateException if this is not a START_ELEMENT or ATTRIBUTE 416 */ 417 public String getAttributePrefix(int index); 418 419 /** 420 * Returns the XML type of the attribute at the provided 421 * index 422 * @param index the position of the attribute 423 * @return the XML type of the attribute 424 * @throws IllegalStateException if this is not a START_ELEMENT or ATTRIBUTE 425 */ 426 public String getAttributeType(int index); 427 428 /** 429 * Returns the value of the attribute at the 430 * index 431 * @param index the position of the attribute 432 * @return the attribute value 433 * @throws IllegalStateException if this is not a START_ELEMENT or ATTRIBUTE 434 */ 435 public String getAttributeValue(int index); 436 437 /** 438 * Returns a boolean which indicates if this 439 * attribute was created by default 440 * @param index the position of the attribute 441 * @return true if this is a default attribute 442 * @throws IllegalStateException if this is not a START_ELEMENT or ATTRIBUTE 443 */ 444 public boolean isAttributeSpecified(int index); 445 446 /** 447 * Returns the count of namespaces declared on this START_ELEMENT or END_ELEMENT, 448 * this method is only valid on a START_ELEMENT, END_ELEMENT or NAMESPACE. On 449 * an END_ELEMENT the count is of the namespaces that are about to go 450 * out of scope. This is the equivalent of the information reported 451 * by SAX callback for an end element event. 452 * @return returns the number of namespace declarations on this specific element 453 * @throws IllegalStateException if this is not a START_ELEMENT, END_ELEMENT or NAMESPACE 454 */ 455 public int getNamespaceCount(); 456 457 /** 458 * Returns the prefix for the namespace declared at the 459 * index. Returns null if this is the default namespace 460 * declaration 461 * 462 * @param index the position of the namespace declaration 463 * @return returns the namespace prefix 464 * @throws IllegalStateException if this is not a START_ELEMENT, END_ELEMENT or NAMESPACE 465 */ 466 public String getNamespacePrefix(int index); 467 468 /** 469 * Returns the uri for the namespace declared at the 470 * index. 471 * 472 * @param index the position of the namespace declaration 473 * @return returns the namespace uri 474 * @throws IllegalStateException if this is not a START_ELEMENT, END_ELEMENT or NAMESPACE 475 */ 476 public String getNamespaceURI(int index); 477 478 /** 479 * Returns a read only namespace context for the current 480 * position. The context is transient and only valid until 481 * a call to next() changes the state of the reader. 482 * @return return a namespace context 483 */ 484 public NamespaceContext getNamespaceContext(); 485 486 /** 487 * Returns a reader that points to the current start element 488 * and all of its contents. Throws an XMLStreamException if the 489 * cursor does not point to a START_ELEMENT.<p> 490 * The sub stream is read from it MUST be read before the parent stream is 491 * moved on, if not any call on the sub stream will cause an XMLStreamException to be 492 * thrown. The parent stream will always return the same result from next() 493 * whatever is done to the sub stream. 494 * @return an XMLStreamReader which points to the next element 495 */ 496 // public XMLStreamReader subReader() throws XMLStreamException; 497 498 /** 499 * Allows the implementation to reset and reuse any underlying tables 500 */ 501 // public void recycle() throws XMLStreamException; 502 503 /** 504 * Returns an integer code that indicates the type of the event the cursor is 505 * pointing to. The initial event type is {@link #START_DOCUMENT}. 506 * 507 * @return the type of the current event 508 */ 509 public int getEventType(); 510 511 /** 512 * Returns the current value of the parse event as a string, 513 * this returns the string value of a CHARACTERS event, 514 * returns the value of a COMMENT, the replacement value 515 * for an ENTITY_REFERENCE, the string value of a CDATA section, 516 * the string value for a SPACE event, 517 * or the String value of the internal subset of the DTD. 518 * If an ENTITY_REFERENCE has been resolved, any character data 519 * will be reported as CHARACTERS events. 520 * @return the current text or null 521 * @throws java.lang.IllegalStateException if this state is not 522 * a valid text state. 523 */ 524 public String getText(); 525 526 /** 527 * Returns an array which contains the characters from this event. 528 * This array should be treated as read-only and transient. I.e. the array will 529 * contain the text characters until the XMLStreamReader moves on to the next event. 530 * Attempts to hold onto the character array beyond that time or modify the 531 * contents of the array are breaches of the contract for this interface. 532 * @return the current text or an empty array 533 * @throws java.lang.IllegalStateException if this state is not 534 * a valid text state. 535 */ 536 public char[] getTextCharacters(); 537 538 /** 539 * Gets the the text associated with a CHARACTERS, SPACE or CDATA event. 540 * Text starting a "sourceStart" is copied into "target" starting at "targetStart". 541 * Up to "length" characters are copied. The number of characters actually copied is returned. 542 * 543 * The "sourceStart" argument must be greater or equal to 0 and less than or equal to 544 * the number of characters associated with the event. Usually, one requests text starting at a "sourceStart" of 0. 545 * If the number of characters actually copied is less than the "length", then there is no more text. 546 * Otherwise, subsequent calls need to be made until all text has been retrieved. For example: 547 * 548 * <pre>{@code 549 * int length = 1024; 550 * char[] myBuffer = new char[ length ]; 551 * 552 * for ( int sourceStart = 0 ; ; sourceStart += length ) 553 * { 554 * int nCopied = stream.getTextCharacters( sourceStart, myBuffer, 0, length ); 555 * 556 * if (nCopied < length) 557 * break; 558 * } 559 * } </pre> 560 * XMLStreamException may be thrown if there are any XML errors in the underlying source. 561 * The "targetStart" argument must be greater than or equal to 0 and less than the length of "target", 562 * Length must be greater than 0 and "targetStart + length" must be less than or equal to length of "target". 563 * 564 * @param sourceStart the index of the first character in the source array to copy 565 * @param target the destination array 566 * @param targetStart the start offset in the target array 567 * @param length the number of characters to copy 568 * @return the number of characters actually copied 569 * @throws XMLStreamException if the underlying XML source is not well-formed 570 * @throws IndexOutOfBoundsException if targetStart {@literal <} 0 or {@literal >} than the length of target 571 * @throws IndexOutOfBoundsException if length {@literal <} 0 or targetStart + length {@literal >} length of target 572 * @throws UnsupportedOperationException if this method is not supported 573 * @throws NullPointerException is if target is null 574 */ 575 public int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) 576 throws XMLStreamException; 577 578 /** 579 * Gets the text associated with a CHARACTERS, SPACE or CDATA event. Allows the underlying 580 * implementation to return the text as a stream of characters. The reference to the 581 * Reader returned by this method is only valid until next() is called. 582 * 583 * All characters must have been checked for well-formedness. 584 * 585 * <p> This method is optional and will throw UnsupportedOperationException if it is not supported. 586 * @throws UnsupportedOperationException if this method is not supported 587 * @throws IllegalStateException if this is not a valid text state 588 */ 589 //public Reader getTextStream(); 590 591 /** 592 * Returns the offset into the text character array where the first 593 * character (of this text event) is stored. 594 * 595 * @return the starting position of the text in the character array 596 * @throws java.lang.IllegalStateException if this state is not 597 * a valid text state. 598 */ 599 public int getTextStart(); 600 601 /** 602 * Returns the length of the sequence of characters for this 603 * Text event within the text character array. 604 * 605 * @return the length of the text 606 * @throws java.lang.IllegalStateException if this state is not 607 * a valid text state. 608 */ 609 public int getTextLength(); 610 611 /** 612 * Return input encoding if known or null if unknown. 613 * @return the encoding of this instance or null 614 */ 615 public String getEncoding(); 616 617 /** 618 * Return a boolean indicating whether the current event has text. 619 * The following events have text: 620 * CHARACTERS,DTD ,ENTITY_REFERENCE, COMMENT, SPACE 621 * 622 * @return true if the event has text, false otherwise 623 */ 624 public boolean hasText(); 625 626 /** 627 * Return the current location of the processor. 628 * If the Location is unknown the processor should return 629 * an implementation of Location that returns -1 for the 630 * location and null for the publicId and systemId. 631 * The location information is only valid until next() is 632 * called. 633 * @return the location of the cursor 634 */ 635 public Location getLocation(); 636 637 /** 638 * Returns a QName for the current START_ELEMENT or END_ELEMENT event 639 * @return the QName for the current START_ELEMENT or END_ELEMENT event 640 * @throws IllegalStateException if this is not a START_ELEMENT or 641 * END_ELEMENT 642 */ 643 public QName getName(); 644 645 /** 646 * Returns the (local) name of the current event. 647 * For START_ELEMENT or END_ELEMENT returns the (local) name of the current element. 648 * For ENTITY_REFERENCE it returns entity name. 649 * The current event must be START_ELEMENT or END_ELEMENT, 650 * or ENTITY_REFERENCE 651 * @return the localName 652 * @throws IllegalStateException if this not a START_ELEMENT, 653 * END_ELEMENT or ENTITY_REFERENCE 654 */ 655 public String getLocalName(); 656 657 /** 658 * returns a boolean indicating whether the current event has a name 659 * (is a START_ELEMENT or END_ELEMENT). 660 * 661 * @return true if the event has a name, false otherwise 662 */ 663 public boolean hasName(); 664 665 /** 666 * If the current event is a START_ELEMENT or END_ELEMENT this method 667 * returns the URI of the prefix or the default namespace. 668 * Returns null if the event does not have a prefix. 669 * @return the URI bound to this elements prefix, the default namespace, or null 670 */ 671 public String getNamespaceURI(); 672 673 /** 674 * Returns the prefix of the current event or null if the event does not have a prefix 675 * @return the prefix or null 676 */ 677 public String getPrefix(); 678 679 /** 680 * Get the xml version declared on the xml declaration 681 * Returns null if none was declared 682 * @return the XML version or null 683 */ 684 public String getVersion(); 685 686 /** 687 * Get the standalone declaration from the xml declaration 688 * @return true if this is standalone, or false otherwise 689 */ 690 public boolean isStandalone(); 691 692 /** 693 * Checks if standalone was set in the document 694 * @return true if standalone was set in the document, or false otherwise 695 */ 696 public boolean standaloneSet(); 697 698 /** 699 * Returns the character encoding declared on the xml declaration 700 * Returns null if none was declared 701 * @return the encoding declared in the document or null 702 */ 703 public String getCharacterEncodingScheme(); 704 705 /** 706 * Get the target of a processing instruction 707 * @return the target or null 708 */ 709 public String getPITarget(); 710 711 /** 712 * Get the data section of a processing instruction 713 * @return the data or null 714 */ 715 public String getPIData(); 716 }