[ 
https://issues.apache.org/jira/browse/XMLBEANS-313?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Wing Yew Poon reassigned XMLBEANS-313:
--------------------------------------

    Assignee: Wing Yew Poon

> Whitespace in document causes unexpected XPath behavior
> -------------------------------------------------------
>
>                 Key: XMLBEANS-313
>                 URL: https://issues.apache.org/jira/browse/XMLBEANS-313
>             Project: XMLBeans
>          Issue Type: Bug
>          Components: XPath
>         Environment: Microsoft Windows XP Professional Version 2002 (Service 
> Pack 2)
> Pentium 4 CPU 3.00GHz, 2.00 GB of RAM
>            Reporter: Coram Bryant
>            Assignee: Wing Yew Poon
>
> There is a bug in XmlBeans whereby the existence of whitespace in a document, 
> wherein the elements are in a default namespace, causes unexpected XPath 
> results.  There are various ways in which this can be manifested (some more 
> difficult to reproduce than others).  The following code demonstrates a 
> simple condition in which this can be seen, as well as similar conditions in 
> which the bug is not manifested.
> In short, the following condition causes an invalid XPath:
> 1) The document has a default namespace
> 2) There are pair of siblings, the first of which is preceded by whitespace
> 3) In the context of the first sibling (in document order), the XPath 
> expression "following-sibling::*[1]" yields the first sibling (rather than 
> the second sibling, as would be expected).
>                 try 
>                 {
>                       String xml;
>                       XmlObject xmlObject;
>                       XmlObject[] results;
>                       
>                       // This XML snippet contains a whitespace character 
> before the child1 element.
>                         // There is a default namespace.
>                         // These conditions will yield the bug
>                       xml = "<root xmlns='http://some_ns'> 
> <child1/><child2/></root>";
>                       xmlObject = XmlObject.Factory.parse(xml);
>                       results = xmlObject.selectPath("declare namespace 
> sn='http://some_ns'; /sn:root/sn:child1/following-sibling::*[1]/name()");
>                       System.out.println(results[0].xmlText()); // Prints 
> <xml-fragment>child2</xml-fragment>
>                       
>                       // This is the case that yields incorrect results
>                         // Note that the context element must be the first 
> sibling in order to yield the bug.
>                         // The bug does not manifest itself if the XPath 
> expression is evaluated from an ancestor, as shown above.
>                       results = xmlObject.selectPath("declare namespace 
> sn='http://some_ns'; /sn:root/sn:child1");
>                       results = results[0].selectPath("declare namespace 
> sn='http://some_ns'; following-sibling::*[1]/name()");
>                       System.out.println(results[0].xmlText()); // Prints 
> <xml-fragment>child1</xml-fragment>
>                       
>                       
>                       // This XML snippet contains no whitespace characters.
>                       // There is a default namespace.
>                         // This condition does not cause the bug
>                       xml = "<root 
> xmlns='http://some_ns'><child1/><child2/></root>";
>                       xmlObject = XmlObject.Factory.parse(xml);
>                       results = xmlObject.selectPath("declare namespace 
> sn='http://some_ns'; /sn:root/sn:child1/following-sibling::*[1]/name()");
>                       System.out.println(results[0].xmlText()); // Prints 
> <xml-fragment>child2</xml-fragment>
>                       
>                       results = xmlObject.selectPath("declare namespace 
> sn='http://some_ns'; /sn:root/sn:child1");
>                       results = results[0].selectPath("declare namespace 
> sn='http://some_ns'; following-sibling::*[1]/name()");
>                       System.out.println(results[0].xmlText()); // Prints 
> <xml-fragment>child2</xml-fragment>
>                       
>                       // This XML Snippet contains a whitespace character 
> before the child1 element.
>                       // There is no namespace.
>                         // This condition does not cause the bug
>                       xml = "<root> <child1/><child2/></root>";
>                       xmlObject = XmlObject.Factory.parse(xml);
>                       results = 
> xmlObject.selectPath("/root/child1/following-sibling::*[1]/name()");
>                       System.out.println(results[0].xmlText()); // Prints 
> <xml-fragment>child2</xml-fragment>
>                       
>                       results = xmlObject.selectPath("/root/child1");
>                       results = 
> results[0].selectPath("following-sibling::*[1]/name()");
>                       System.out.println(results[0].xmlText());  // Prints 
> <xml-fragment>child2</xml-fragment>
>               } 
>                 catch (XmlException e) 
>               {
>                       e.printStackTrace();
>               }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@xmlbeans.apache.org
For additional commands, e-mail: dev-h...@xmlbeans.apache.org

Reply via email to