You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-users@xalan.apache.org by Naveen Arora <na...@osi.com> on 2011/03/10 09:38:06 UTC
Failure in trying to select element using XPath when the document has
mixed namespaces tags.
DESCRIPTION OF THE PROBLEM :
Failure in trying to select element using XPath when the document has mixed
namespaces tags.
Example of document:
<?xml version='1.0'?><Response user="user" requestId="
clientName@requestId">blah0<SOAP:Envelope xmlns:SOAP="
http://schemas.xmlsoap.org/soap/envelope/"><SOAP:Header>blah1</SOAP:Header><SOAP:Body></SOAP:Body></SOAP:Envelope></Response>
The XPathEvaluator to select the element
"/,Response/SOAP:Envelope/SOAP:Header" does not work correctly and gives
incorrect results. (However...document with usage of no namespace or usage
of namespace through out the document work properly in identifying the
element.)
FULL PRODUCT VERSION :
libxalan-c1_4_0.so
libxerces-c.so.21.0
CODE DESIGN:
The code design has been borrowed from Sample file
"c/samples/SimpleXPathAPI/SimpleXPathAPI.cpp"
REPRODUCIBILITY :
The behavior is consistently reproducible.
SPECIFIC QUESTIONS:
Is there a workaround to this issue?
Is this a known issue, if yes is issue fixed in a later releas?
Re: Failure in trying to select element using XPath when the document
has mixed namespaces tags.
Posted by David Bertoni <db...@apache.org>.
On 3/10/2011 12:38 AM, Naveen Arora wrote:
>
> DESCRIPTION OF THE PROBLEM :
> Failure in trying to select element using XPath when the document has
> mixed namespaces tags.
> Example of document:
> <?xml version='1.0'?><Response user="user"
> requestId="clientName@requestId">blah0<SOAP:Envelope
> <mailto:clientName@requestId%22%3Eblah0%3CSOAP:Envelope>
> xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"><SOAP:Header>blah1</SOAP:Header><SOAP:Body></SOAP:Body></SOAP:Envelope></Response
> <http://schemas.xmlsoap.org/soap/envelope/%22%3E%3CSOAP:Header%3Eblah1%3C/SOAP:Header%3E%3CSOAP:Body%3E%3C/SOAP:Body%3E%3C/SOAP:Envelope%3E%3C/Response>>
>
>
> The XPathEvaluator to select the element
> "/,Response/SOAP:Envelope/SOAP:Header" does not work correctly and gives
I'm going to assume this "," is a typo.
> incorrect results. (However...document with usage of no namespace or
> usage of namespace through out the document work properly in identifying
> the element.)
>
>
> FULL PRODUCT VERSION :
> libxalan-c1_4_0.so
> libxerces-c.so.21.0
>
> CODE DESIGN:
> The code design has been borrowed from Sample file
> "c/samples/SimpleXPathAPI/SimpleXPathAPI.cpp"
>
>
> REPRODUCIBILITY :
> The behavior is consistently reproducible.
This is likely a limitation in the sample code you're using, rather than
a bug. You need to take a look at the PrefixResolver interface and
implement one that works for your case. Its purpose is to map namespace
prefixes like "SOAP" to the corresponding namespace URIs, which in this
case is "http://schemas.xmlsoap.org/soap/envelope/".
The sample application uses a derivative called ElementPrefixResolver
that takes the root element and looks at that element for namespace
declarations. This won't work for you, because not all of the namespace
declarations appear in the root element of your document. You need to
create an implementation of PrefixResolver that knows about all of the
namespace prefixes and URIs in your documents.
Dave