XPATH雜記2

1. html標記告訴瀏覽器如何顯示該信息,但標記沒有告訴瀏覽器信息是什麼.
 使用 XML,您可以給文檔中的標記賦予某種含意。更重要的是,機器也容易處理這樣的信息
2.XML 支持智能代碼。因爲可以使 XML 文檔結構化以標識每個非常重要的信息片段(以及這些片段之間的關係),所以可以編寫無需人工幹
 預就能處理這些 XML 文檔的代碼。軟件供應商花費了大量時間和金錢來構建 XML 開發工具這一事實意味着編寫那樣的代碼是相對簡單的過程。
3.XML 規範需要解析器拒絕任何沒有遵守基本規則的 XML 文檔。大多數 HTML 解析器接受隨意的標記,它們會猜測文檔作者的意圖。
4/XML 文檔中的屬性必須有值,必須用引號括起,您可以使用單引號,也可以使用雙引號,但要始終保持一致。
5.如果屬性值包含單引號或雙引號,則您可以使用另一種引號來括起該值(如 name="Doug's car"),
   或使用實體 " 代表雙引號,使用 ' 代表單引號。實體是一個符號(如 "),
   XML 解析器會用其它文本代替該符號(如 ")。
6.建議使用 XML 聲明,但它不是必需的。如果有的話,那麼它一定是文檔的第一樣東西;standalone="no" 是缺省的
7.註釋以 <!-- 開始,以 --> 結束。註釋不能在結束部分以外包含雙連字符(--);
8.處理指令:處理指令是爲使用一段特殊代碼而設計的標記。它的含義有工具自己確定(楊覺得是這樣的)
9. 實體:<!ENTITY dw "developerWorks">  示例爲文檔定義了一個實體。
         無論 XML 處理器在何處找到字符串 &dw;,它都會用字符串 developerWorks 代替該實體; 當然XML還有幾個預定義的實體
10. 如何分辨某個特定的 <title> 元素指的是人、書籍還是一份財產呢?可以使用名稱空間。
   要使用名稱空間,您要定義一個名稱空間前綴,然後將它映射至一個特殊字符串。然後給元素加上這個名稱空間前綴(當然上一層上
   使用由於繼承的功能,也能達到在元素上用這個名稱空間前綴的目的)

   最後要指出的是:名稱空間定義中的字符串僅僅是字符串。對,這些字符串看似 URL,其實不是。
   您可以定義 xmlns:addr="mike",那也是有效的。名稱空間唯一的重要性在於其唯一性;
   這就是爲什麼大多數名稱空間定義看起來象 URL 的原因。


   <?xml version="1.0" encoding="UTF-8"?>
<orders xmlns="http://www.nicholaschase.com/orderSystem.html">
     <order>
      <customerid limit="1000">12341<customerid>
...
</orders>
沒有指定名稱空間的任何元素都在默認名稱空間 http://www.nicholaschase.com/orderSystem.html 中。
實際的 URI 本身並沒有表示任何意義。信息可能在也可能沒有在該地址,重要的是它必須是唯一的


11.模式可以定義您能在 DTD 中使用的所有文檔結構,它還可以定義數據類型和比 DTD 更復雜的規則.
    DTD 定義可以在 XML 文檔中出現的元素、這些元素出現的次序、它們可以如何相互嵌套等等

12.
<!ELEMENT address (name, street, city, state, postal-code)>
<!ELEMENT name (title? first-name, last-name)>
<!ELEMENT title (#PCDATA)>
<address> 元素包含一個 <name>、一個 <street>、一個 <city>、一個 <state> 和一個 <postal-code>。所有這些元素必須出現,
而且必須以這個順序出現。
<name> 元素包含一個可選的 <title> 元素(問號表示 title 這個元素是可選的),後面跟有一個 <first-name> 和一個 <last-name> 元素。
所有其它包含文本的元素。(#PCDATA 代表已解析字符數據;不能在這些元素中包含另一個元素。)

 

XML Schema例子:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="memories">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="memory" type="memoryType"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

<xsd:complexType name="memoryType">
  <xsd:sequence>
    <xsd:element name="subdate" type="xsd:date"/>
    <xsd:element name="donor" type="xsd:string"/>
    <xsd:element name="subject" type="xsd:string"/>
  <xsd:attribute name="tapeid" type="idNumber" />
</xsd:complexType>
</xsd:schema>

 

 

13.
DTD 語法不同於普通的 XML 語法,相反,XML Schema 文檔本身就是 XML


14.
(XSLT))是一個描述如何將 XML 文檔轉換成別的東西的.
您使用 XSLT 樣式表中的 XPath 來描述您希望轉換 XML 文檔的哪個部分。XPath 也用在其它 XML 標準中,
這就是爲什麼它是獨立於 XSLT 的標準的原因

15.
XLink(XML 鏈接語言)定義將不同資源鏈接在一起的各種方法。
您可以進行正常的點對點鏈接(就象用 HTML <a> 元素);
XPointer(XML 指針語言)使用 XPath 作爲引用其它資源的方法

16.
有兩個處理 XML 文檔安全性的重要標準。一個是 XML 數字簽名(XML Digital Signature)標準,
您可以用數字簽名來驗證一個特定文件自簽名後沒有被修改過;
另一個標準用於加密 XML 文檔,落入他人之手也不用害怕.
我可以對一個重要的 XML 文檔進行數字簽名,生成一個包含 XML 文檔本身的簽名。然後我可以加密該文檔

17.
SOAP-----SOAP 定義一個 XML 文檔格式,該格式描述如何調用一段遠程代碼的方法,應用程序通過網絡將該 XML 文檔發送給那段代碼。
代碼接收 XML 文檔、解釋它、調用我請求的方法,然後發回一個描述結果的 XML 文檔.
UDDI------統一描述、發現和集成(Universal Description, Discovery, and Integration)協議向 Web 服務註冊中心定義 SOAP 接口。

 

 

 

 

 

 

 

1.
XPath 中的字符串使用引號(' 或 ")包圍起來。
XPath 提供的數值運算符有:+(加)、-(減)、*(乘)、div(除)和 mod(整除求餘)。
提示:減法(-)運算符的前面必須有空格,因爲 XML 允許字符串中包含“-”字符。
可以用表達式 position()=last() 測試處理的是否是集合中的最後一個節點,
count(//item) 返回 item 元素的個數,即 7。

2.
<xsl:template match="list">
     <h1>Auctions ending in the hour</h1>
     <table border="1">
       <th>Time remaining</th>
       <th>ID</th>
       <th>Description</th>
       <th>Seller</th>
       <th>Current Price</th>
       <th>Bid</th>
       <th>Type</th>
       <th>Private</th>

<!--下面主要放置過濾某些行-->
       <xsl:apply-templates select="item[endOfAuction div 60 &lt; 1]"/>
     </table>
   </xsl:template>

   <xsl:template match="item">
     <tr>
<!--用哪些變量的值來填充-->
      <td><xsl:value-of select="endOfAuction"/> min</td>
      <td><xsl:value-of select="@id"/></td>
      <td><xsl:value-of select="description"/></td>
      <td><xsl:value-of select="sellerId"/></td>
      <td><xsl:value-of select="currentPrice/@currency"/><xsl:value-of select="currentPrice"/></td>
      <td><xsl:value-of select="bidIncrement"/></td>
      <td><xsl:value-of select="@type"/></td>
      <td><xsl:value-of select="@private"/></td>
     </tr>
   </xsl:template>
3.
lang("en") 對於 my.xml 樹中的任何節點都返回 false,因爲沒有指定 xml:lang 屬性。
floor()——返回不大於數字參數的最大整數數字。比如,floor(2.75) 返回 2。
ceiling()——返回不小於數字參數的最小整數數字。比如,ceiling(2.75) 返回 3。
round()——返回和數字參數最接近的整數數字。比如,round(2.75) 返回 3。

4.
W3C 已經定義了兩個系列的樣式表標準。第一個是在 HTML 中廣泛使用的 CSS(級聯樣式表),
另外一個就是更強大的樣式表語言 XSL(可擴展樣式表語言).

在 XSL 的開發過程中(這在 DSSSL 中已有所預示),發現在準備 XML 文檔以備顯示的過程中執行的任務可以分成兩個階段:
轉換和格式化。轉換是將一個 XML 文檔(或其內存中的表示法)轉換成另一個 XML 文檔的過程。格式是將已轉換的樹狀結構
轉換成兩維圖形表示法或可能是一維音頻流的過程。XSLT 是爲控制第一階段“轉換”而開發的語言。
第二階段“格式化”的開發工作還是進行中.但實際上,大多數人現在使用 XSL 將 XML 文檔轉換成 HTML,並使用 HTML 瀏覽器作爲格式化引擎

5.還有更多需要注意的地方。現在給出的表達式僅僅返回實際的元素。可能還要獲得這些節點的值。如果需要元素的值(假設元素包含文本數據),需要使用 text() 函數。要獲

得第一個 h1 的文本,應使用 body/h1/text() ;可以使用 head/meta/@http-equiv 返回 meta 元素 http-equiv 屬性的值;
可以使用 /html/body/* 選擇 body 元素的所有直接子元素。也可用 /html/head/meta/@* 選擇 meta 標記的所有屬性

6.
後代選擇器用雙斜線 // 表示。使用它告訴 XPath 選擇所有指定的節點,無論嵌套得多深.比如 /html/body//table XPath 選擇嵌套在 XHTML 的 body 元素中的所有 table 元素

,不論直接嵌套在 body 中(如 /html/body/table ),還是嵌套了多層(如 /html/body/table/tr/td/table )。這種情況下,嵌套的 table 和頂層 table 同時被選中。

當與屬性結合使用的時候就變得很有趣了(使用 @)。比方說,假設要選擇具有 id 屬性的所有元素。可使用 //@id ,首先跳回根元素然後選擇文檔中的所有 id 屬性。但是實際

上要訪問的是元素而不是屬性,因此需要從屬性上移一層到包含這些屬性的元素:

//@id/..

 //@class[.="greentea"] 選擇值爲 greentea 的所有 class 屬性。然後再移動到這些屬性所在的元素:

//@class[.="greentea"]/..
7.
得到了出生年份(可能是 1976 或者 1945),然後要減去 1900:

(/people/person/birthdate/@year) - 1900

8.
ormalize-space(string(//p))

   1. //p 選擇文檔中所有的 p 元素,無論其位於何處。
   2. string(//p) 獲取這些元素的內容組成一個大字符串。但是字符串中包含很多無用的空白,因此還要進一步處理。
   3. normalize-space(string(//p)) 規範化內容中的空白字符,得到您希望的文本。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章