名前空間のない文字列として xml ドキュメントがあり、Java、JDOM、および XPath を使用してそれを解析し、オブジェクト ツリーを作成したいと考えています。XPAth はクエリを実行するために常にプレフィックスと名前空間を必要とするため、名前空間とプレフィックスをルートに追加し、後で取得したいノードに追加しましたが、Xpath にはドキュメント内のすべてのノードで名前空間が必要ですが、ルートでのみ必要であることがわかります。 .
最初に、ドキュメント オブジェクト内のすべての要素に名前空間を追加して、xpath クエリが正しく機能するようにする方法はありますか?
コードには他にも間違いや悪いアプローチがあるはずです。どんなアイデアでもうれしいです。
String response="myXmlString"
ByteArrayInputStream stream = new ByteArrayInputStream(
response.getBytes());
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(stream);
org.jdom.Element request=(org.jdom.Element) doc.getRootElement();
request.setNamespace(Namespace.getNamespace("myNamespace"));
createRequest(request);
その後
public Request createRequest(Element requestXML) {
Request request = new Request();
requestXML.detach();
Document doc = new Document(requestXML);
XPath xpath = XPath.newInstance(myExpression);
xpath.addNamespace("m", doc.getRootElement().getNamespaceURI());
xpath.selectSingleNode(doc);
}
この最後の行は空を返します。null ではありませんが、内部で jdom 例外をスローします。