[ https://issues.apache.org/jira/browse/XALANJ-2469?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henry Zongaro resolved XALANJ-2469. ----------------------------------- Resolution: Invalid Thanks for the clarification. Note that this is an FAQ.[1] Section 2.3 of the XPath recommendation[2] says, "A node test that is a QName is true if and only if the type of the node (see "5 Data Model") is the principal node type and has an expanded-name equal to the expanded-name specified by the QName." Just above that appears the text you've quoted: "if the QName does not have a prefix, then the namespace URI is null." Section 5 of XPath[3] goes on to state, "Two expanded-names are equal if they have the same local part, and either both have a null namespace URI or both have non-null namespace URIs that are equal." In your example, the node tests in /Invoice/InvoiceHeader/InvoiceParty have no prefix, so the namespace URIs in their expanped-names are null. But the expanded-names of the corresponding nodes in your input document are not null, because they are in some non-null default namespace. Hence, according to the definition of equality of expanded-names, the node tests in your path expression do not match the nodes in your input document, and an empty node set is the result of evaluating the path expression. In order to resolve this problem, you'll need to specify some sort of prefix/namespace resolver (how you do so, depends on the API you're using) and use prefixes in your path expressions wherever you want to match nodes that are in a namespace. If you really want to match nodes named Invoice, InvoiceHeader and InvoiceParty regardless of whether they are in a namespace or in no namespace (which isn't really considered good practice), you'll need to use a path expression like this: /*[local-name()='Invoice']/*[local-name()='InvoiceHeader']/*[local-name()='InvoiceParty'] I hope that helps. [1] http://xml.apache.org/xalan-j/faq.html#faq-N10207 [2] http://www.w3.org/TR/xpath#node-tests [3] http://www.w3.org/TR/xpath#dt-expanded-name > Xpath support in Xalan does not work if default namespace is used > ----------------------------------------------------------------- > > Key: XALANJ-2469 > URL: https://issues.apache.org/jira/browse/XALANJ-2469 > Project: XalanJ2 > Issue Type: Bug > Security Level: No security risk; visible to anyone(Ordinary problems in > Xalan projects. Anybody can view the issue.) > Components: XPath > Affects Versions: 2.0.x > Environment: Windows, IBM WebSphere Application Server - ND, > 6.1.0.7 > Reporter: rohit singh > Priority: Blocker > Fix For: 2.0.x > > > We are trying to use path for example "/Invoice/InvoiceHeader/InvoiceParty" > as an X-Path expression. The XML document on which this xpath is evaluated > has a default namespace defined. This xpath expression does return the > specified elements value. I check the specification on xpath 1.0 on this url > http://www.w3.org/TR/xpath and got this text below > "There is an element node for every element in the document. An element node > has an expanded-name computed by expanding the QName of the element specified > in the tag in accordance with the XML Namespaces Recommendation [XML Names]. > The namespace URI of the element's expanded-name will be null if the QName > has no prefix and there is no applicable default namespace." > According to the above the xpath should work irrespective of whether we have > specified a default namespace or not. Please take this as a high priority and > fix this problem. -- 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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]