Alex Cruise wrote:
I'm using the version of Xalan that comes with J2SE 1.4.2 and I'm having difficulty with namespaces.
I should probably quote some examples... :)
The XPath I'm searching for is '/soapenv:Body/ns1:getQuote'.
'soapenv' corresponds to 'http://schemas.xmlsoap.org/soap/envelope/';
'ns1' (a generated name obviously) corresponds to 'urn:xmethods-delayed-quotes'
I'm pretty sure that the prefixes in my XPath don't need to correspond to the prefixes in the request I'm trying to evaluate. Here's a request:
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <namesp1:getQuote xmlns:namesp1="urn:xmethods-delayed-quotes"> <c-gensym3 xsi:type="xsd:string"> SUNW </c-gensym3> </namesp1:getQuote> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
And here are a few snippets of the code I'm attempting to use to accomplish this:
private class MyPrefixResolver implements PrefixResolver {
public MyPrefixResolver( Map namespaceMap ) {
_map = namespaceMap;
}
public String getNamespaceForPrefix(String prefix) {
return (String)_map.get(prefix);
}
public String getNamespaceForPrefix(String prefix, Node context) {
return getNamespaceForPrefix(prefix);
}
public String getBaseIdentifier() {
return null;
}
public boolean handlesNullPrefixes() {
return false;
}
private Map _map;
}(later...)
_cachedXPathAPI = new CachedXPathAPI();
Map namespaceMap = getNamespaceMap();
if ( namespaceMap != null && !namespaceMap.isEmpty() ) {
XPathContext context = _cachedXpathAPI.getXPathContext();
context.setNamespaceContext(
new MyPrefixResolver( namespaceMap ) );(even later...)
NodeIterator i = _cachedXpathAPI.selectNodeIterator( doc, pattern );
TIA,
-0xe1a
