xPath :: NamespaceContext
-
Hallo,
ich habe eine beispiels XML-Datei:
<?xml version="1.0" encoding="ISO-8859-1"?> <root xmlns="http://www.softlab.de/2006/IOML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.softlab.de/2006/IOML ioml_iocmd.xsd" > <command> <title>Command-Test Nr.1</title> <datum>2007.08.28</datum> <a_1>1</a_1> <a_2>11</a_2> </command> </root>
um diese Datei zu evaluate() muss ich das Interface NamespaceContext implementieren (wegen xmlns="http://www.softlab.de/2006/IOML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.softlab.de/2006/IOML ioml_iocmd.xsd"):public class NamespaceContextImpl implements NamespaceContext { public String getNamespaceURI(String prefix){ logger.info("==|> getNamespaceURI("+prefix+")"); if (prefix.equals("xml")) return "http://www.w3.org/2001/XMLSchema-instance"; else if (prefix.equals("schemaLocation")) return "http://www.softlab.de/2006/IOML ioml_iocmd.xsd"; else return XMLConstants.DEFAULT_NS_PREFIX; } // This method isn't necessary for XPath processing. public String getPrefix(String uri) { throw new UnsupportedOperationException(); } // This method isn't necessary for XPath processing either. public Iterator getPrefixes(String uri) { throw new UnsupportedOperationException(); } }
Das Problem ist wenn ich in der XML-Datei in dem root-Tag das (xmlns="http://www.softlab.de/2006/IOML" ) weglasse bekommen ein Ergebniss, wenn ich aber das (xmlns="http://www.softlab.de/2006/IOML" ) in dem root-Tag einfühge habe ich plötzlich kein Ergebniss mehr !?!?
xPath: //command/a_1/text()
Weist vielleicht jemad woran es liegen könnte???
-
Obwohl xmlns="http://www.softlab.de/2006/IOML" der default XML Namespace ist, und keinen Prefix hat, musst du in deinem NamespaceContext einen Prefix dafür festlegen und den dann im XPath benutzen.