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

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

Patricia Arquette
リリース: 2024-11-11 18:24:03
オリジナル
380 人が閲覧しました

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次のような名前空間は複雑さを増します:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <sheets>
    <sheet name="Sheet1" sheetId="1" r:id="rId1"/>
  </sheets>
</workbook>
ログイン後にコピー

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

解決策:

  1. 名前空間の登録: 推奨される方法プレフィックスを使用して名前空間を登録し、それを 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. ローカル名Match: あまり推奨されないオプションは、名前空間を無視して要素のローカル名のみで一致させることですが、これは、語彙が混在している場合に誤った要素を選択する危険性があります。

以上がJava XPath クエリで XML 名前空間を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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