「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java XPath クエリで XML 名前空間を処理するにはどうすればよいですか?

Java XPath クエリで XML 名前空間を処理するにはどうすればよいですか?

2024 年 12 月 22 日に公開
ブラウズ:621

How to Handle XML Namespaces in Java XPath Queries?

Java XPath クエリでの XML 名前空間の処理

Java では、XPath を使用して XML をクエリする場合、名前空間によって問題が発生する可能性があります。 XML に名前空間が含まれていない場合、XPath クエリは簡単ですが、名前空間が存在すると複雑になります。

ケース 1: 名前空間のない XML

名前空間のない XML の場合、XPathクエリではデフォルトの名前空間が使用されますが、これは事実上名前空間ではありません。この場合、「/workbook/sheets/sheet[1]」のようなクエリで要素を簡単に取得できます。

ケース 2: 名前空間を含む XML

ただし、名前空間を含む XML次のような名前空間を使用すると、複雑さが増します:



  
    
  

このような場合、要素が「http://schemas.openxmlformats.org/spreadsheetml/」にバインドされているため、XPath 式「/workbook/sheets/sheet[1]」は失敗します。 2006/メイン」 namespace.

Solutions:

  1. Namespace Registration: 推奨される方法は、プレフィックスを使用して名前空間を登録し、それをXPath クエリにより、読み取りと保守が容易になります。
  2. 述語との汎用一致: なし名前空間の登録では、より複雑な XPath 式を使用できます:
/*[local-name()='workbook' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main']
  /*[local-name()='sheets' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main']
  /*[local-name()='sheet' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main'][1]
  1. Local-Name Match: あまり推奨されないオプションは、名前空間を無視して要素のローカル名のみで一致させることですが、これは語彙が混在している場合に誤った要素を選択する危険性があります。 存在する。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3