ホームページ > Java > &#&チュートリアル > Java で XPath を使用して名前空間を含む XML をクエリするにはどうすればよいですか?

Java で XPath を使用して名前空間を含む XML をクエリするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-10 06:10:02
オリジナル
402 人が閲覧しました

How to Query XML with Namespaces using XPath in Java?

Java で XPath を使用して名前空間を含む XML をクエリする

名前空間を利用する 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート