日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

XML——使用 XPath来定位信息+使用命名空间

發布時間:2023/12/3 asp.net 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XML——使用 XPath来定位信息+使用命名空间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【0】README

0.1)本文文字描述轉自 core java volume 2 , 旨在理解 XML——使用 XPath來定位信息+使用命名空間 的基礎知識 ;
0.2) for detailed XPath info : please visit ( http://www.ruanyifeng.com/blog/2009/07/xpath_path_expressions.html + http://www.w3schools.com/xsl/xpath_syntax.asp)
0.3) for source code about XPath, please visit https://github.com/pacosonTang/core-java-volume/tree/master/coreJavaAdvanced/chapter2/XPath


【1】XPath 相關

1)problem+solution (干貨——XPath引入的原因)

  • 1.1)problem: 如果要定位某個 XML 文檔中的一段特定信息, 那么,通過遍歷DOM 樹的眾多節點來進行查找顯得有些麻煩;
  • 1.2)solution: XPath 語言使得 訪問樹節點變得很容易;

2)看個荔枝:有下面的XML文檔

<configuration><database><username>dbuser</username><password>dbuser</password>.....</database> </configuration>
  • 2.1)可以通過 讀 XPath 表達式 /configuration/database/username 求值得到 database 中 的username;
  • 2.2)使用 XPath 執行以下操作比普通的DOM 方式要簡單得多:
    • 2.2.1)獲得文檔節點;
    • 2.2.2)枚舉它的子元素;
    • 2.2.3)定位 database 元素;
    • 2.2.4)獲取 database 元素的第一個子元素, 即 username 元素;
    • 2.2.5)獲取 username 元素的第一個子元素, 即 text 節點;
    • 2.2.6)獲取 text 節點中的數據;
  • 2.3)XPath 可以描述 XML 文檔中的一個節點集: 如 /a/b ;

    • 2.3.1)我們可以用[] 操作符來選擇特定元素:/a/b[1];
    • 2.3.2)使用 @ 操作符可以得到屬性值, /a/b/c@anchor
  • 2.4)XPath有很多有用的函數: count 函數:count(/a/b), 返回 a根元素的b子元素的數量。

3)Java SE 5 增加了一個API來計算XPath表達式, 需要先從 XPathFactory 創建一個 XPath對象:

XPathFactory xpf = XPathFactory.newInstance(); path = xpf.newXPath();
  • 3.1)然后調用 evaluate 方法來計算 XPath 表達式:

String username = path.evaluate("/a/b/c",doc);

  • 3.2)可以用同樣的 XPath 對象來計算多個表達式: 這種形式的 evaluate 返回一個字符串, 這很適合用來獲取文本,比如前面 的例子中的 username 節點中的文本;
  • 3.3)如果XPath 表達式產生了一組節點, 請做如下調用:
    NodeList nodes = (NodeList) path.evaluate("/a/b", doc, XpathConstants.NODESET);
  • 3.4)如果結果只有一個節點, 則以 XPathConstants.NODE 代替:
    Node node = (Node) path.evaluate("/a/b[1]", doc, XPathConstants.NODE);
  • 3.5)如果結果是一個數字, 則使用 XPathConstants.NUMBER:
    int count = (Number) path.evaluate("count(/a/b)", doc, XPathConstants.NUMBER.intValue());
  • 3.6)不必從文檔的根節點開始搜索, 可以從任意一個節點或節點列表開始。
如果你有前一次計算得到的節點, 那么就可以調用: result = path.evaluate(expr, node);


【2】使用命名空間

1)java用包來避免名字沖突,XML 也有類似的命名空間機制,可以用于元素名和屬性名; (干貨——XML的命名空間機制等同于java中的package)

  • 1.1)名字空間:是由統一資源標識符(Uniform Resource Identifier, URI)來標識的;
  • 1.2)HTTP的URL格式是最常用的: 注意 URL 只用作標識符字符串,而不是一個文件的定位符; (干貨——HTTP的URL格式是最常用作為命名空間的,僅僅在于標識,而不是定位某個文件) 如, 名字空間標識符:
http:// www.horstman.com/corejava ; http:// www.horstman.com/corejava/index.html;表示了不同的命名空間, 盡管web 服務器為這兩個URL 提供相同的文檔;

2)人們習慣于將解釋該命名空間的文檔放在 URL位置上。如,如果你把瀏覽器指向 XML Schema 的命名空間URL, 你就會發現一個描述XML Schema 標準的文檔;

  • 2.1)為什么要用URL 作為命名空間的標識符呢? 這是因為這樣容易確保它們是獨一無二 的。

3)java中,使用import來指定很長的包名, 然后只需要使用較短類名;

  • 3.1)在XML中,有類似機制, 如 (干貨——如何在xml中引入 命名空間)
<element xmlns="namespaceURI">children </element>
  • 3.2)現在, 該元素和他的子元素都是給定命名空間的一部分了, 子元素可以提供自己的命名空間, 如: (干貨——父元素和子元素可以有自己不同的命名空間)
<element xmlns="namespaceURI1"><child xmlns="namespaceURI2">grandchildren</child> </element> 這樣,第一個子元素和孫元素都是第二個命名空間的一部分了;
  • 3.3)你也可以用一個前綴來表示命名空間, 即為特定文檔選取的一個短的標識符。下面是一個典型的荔枝: (干貨——用一個前綴來表示命名空間)
<xsd: schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"><xsd: element name="a" type="GridBagType"> </xsd: schema>
  • 3.4)下面的屬性: xmlns :prefix = “namespaceURI” , 用于定義命名空間和前綴。 在我們的例子中, 前綴是xsd。 這樣, xsd:schema 實際上指的是 命名空間 http://www.w3.org/2001/XMLSchema 中的schema;

  • Attention)

    • A1) 只有子元素繼承了它們父元素的命名空間, 而不帶顯示前綴的屬性不是命名空間的一部分;

4)默認情況下, DOM 解析器并非“命名空間感知的”, 要打開命名空間處理特性:

請調用 DocumentBuilderFactory 類的 setNamespace Aware 方法: factory.setNamespaceAware(true);

(干貨——開命名空間處理特性,factory.setNamespaceAware(true))

  • 4.1)這樣,工廠產生的所有生成器便都支持命名空間了。每個節點有3個屬性(Properties):
    • P1)帶有前綴的限定名, 由 getNodeName 和 getTagName 等方法返回;
    • P2)命名空間 URI ,由 getNamespaceURI 方法返回;
    • P3)不帶前綴和命名空間的本地名, 由getLocalName 方法返回;

4)看個荔枝:

  • 4.1)下面是一個荔枝, 假設解析器看到了以下元素:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  • 4.2) 它會報告:
限定名 = xsd :schema ; 命名空間 URI = http://www.w3.org/2001/XMLSchema ; 本地名=schema ;
  • Attention) 如果對命名空間的感知特性被關閉, getLocalName 和 getNamespaceURI 方法將返回 null;

總結

以上是生活随笔為你收集整理的XML——使用 XPath来定位信息+使用命名空间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。