首頁  >  文章  >  Java  >  如何處理 Java XPath 查詢中的 XML 命名空間?

如何處理 Java XPath 查詢中的 XML 命名空間?

Patricia Arquette
Patricia Arquette原創
2024-11-11 18:24:03351瀏覽

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. 本地名稱匹配: 不太受歡迎的選項是僅匹配元素的本地名稱,忽略命名空間,但是如果存在混合詞彙表,則存在選擇不正確元素的風險。

以上是如何處理 Java XPath 查詢中的 XML 命名空間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn