[prev in list] [next in list] [prev in thread] [next in thread]
List: xmlbeans-dev
Subject: [jira] Assigned: (XMLBEANS-313) Whitespace in document causes
From: "Wing Yew Poon (JIRA)" <xmlbeans-dev () xml ! apache ! org>
Date: 2009-10-25 1:14:59
Message-ID: 2040922820.1256433299507.JavaMail.jira () brutus
[Download RAW message or body]
[ 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-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic