名前空間を利用する XML を操作する場合、名前空間を無視する XPath クエリは不正確な一致を引き起こす可能性があります。 XML 要素が特定の名前空間にバインドされているシナリオでは、XPath 式で名前空間を考慮することが重要になります。
推奨されるアプローチは、名前空間の接頭辞を宣言し、明示的に行うことです。 XPath クエリで参照してください。これにより、コードの可読性と保守性が向上します。例:
NamespaceContext namespaceContext = new NamespaceContext(); namespaceContext.addNamespace("x", "http://schemas.example.com/x"); XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); xpath.setNamespaceContext(namespaceContext); NodeList nodes = (NodeList)xpath.evaluate("/x:workbook/x:sheets/x:sheet[1]", doc, XPathConstants.NODESET);
または、要素を一般的に一致させ、述語を使用してローカル名と名前空間に基づいて結果をフィルタリングする XPath 式を構築することもできます。 -うり。このアプローチは冗長かもしれませんが、より柔軟な対応が可能になります。
XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); Item node = (Item)xpath.evaluate("//*[local-name()='workbook' and namespace-uri()='http://schemas.example.com/x']", doc, XPathConstants.NODE);
最後の手段として、要素を無視してローカル名のみに基づいて一致させることができます。名前空間。ただし、このアプローチでは、XML 内に類似したローカル名を持つ複数の語彙が存在するシナリオでは、間違った要素が一致するリスクが生じます:
XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); Item node = (Item)xpath.evaluate("//*[local-name()='workbook']", doc, XPathConstants.NODE);
以上がJava で XPath を使用して名前空間を含む XML をクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。