[ 
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]

Reply via email to