2013-07-19 21 views
0

筆者在他的書中說,在做Document Order解釋說:混亂與XPATH - 文檔順序

換句話說,文檔順序僅僅指的是在哪些節點出現在XML文檔中的順序。例如,當處理包含其他元素的元素時,順序沒有問題,但是當您處理同一級別上的元素時 - 同輩元素 - 文檔順序指定它們應該按照它們在原始的XML文件。

關於文檔順序還有一件事要知道 - 即使文檔順序,屬性節點也沒有任何特殊順序。

現在我的問題是 -

  • 爲什麼不需要屬性的順序?

  • 「當你處理包含其他元素的元素時,順序是沒有問題的 - 」爲什麼?

  • -

回答

1

要詳細說明以前的答案並回應第一條評論,我認爲這一切都圍繞層次結構。如果元素包含其他元素,則順序很明顯,因爲有層次結構。

在以下示例中,a按文檔順序排在b之前。

<a> 
    <b/> 
</a> 

在以下示例中,bc是兄弟(都在同一水平上;的a兒童)。關於兄弟姐妹的文件順序不是很明顯,但c以文件順序在b之前。

<a> 
    <c/> 
    <b/> 
</a> 

如果結構複雜,這可能會令人困惑。例如,在以下文檔中,d按文檔順序位於b之前,儘管d位於分層樹下方(它是b的兄弟c的子節點)。

<a> 
    <c> 
    <d/> 
    </c> 
    <b/> 
</a> 

屬性的順序是不需要的,因爲它們不代表層次結構。他們只是描述/進一步定義元素。考慮元數據。唯一排序的文檔是元素屬性位於任何元素子元素之前。這些屬性的相對順序是依賴於實現的。

例如,如果您使用XPath /*/@*[1]下列文件:

<foo b="x" a="x"/> 

你既可以拿到a屬性或屬性b取決於如何執行命令的屬性。

+0

我有一些像這樣的小概念問題,現在你的回答非常好,我可以親自給你發電子郵件,如果你允許嗎?不是很經常,我剛開始'xpath'。所以在閱讀書籍時面臨一些問題。 –

+0

@Priti - 你不僅歡迎emai我。我的電子郵件在我的檔案中。雖然我並不總是很快回應,所以你仍然應該考慮使用stackoverflow作爲頂級資源。另外,如果我的答案足夠了,請考慮通過點擊旁邊的複選標記來接受它。謝謝! –

+0

@Priti - 發送電子郵件 –

0

「沒有有關訂單的問題,當你處理圍住其他元素的元素,」 - 爲什麼?

那麼,顯然有一個問題,因爲你剛剛問過它。只是作者出於某種原因認爲答案很明顯。答案是,如果A是B的祖先,那麼A按照文檔順序在B之前。

爲什麼不需要屬性的順序?

這是XML中的一個設計原則,如果順序很重要,您不應該使用屬性。這涉及對象建模的語義:屬性表示獨立且正交的對象的屬性。就像形容詞一樣:說一個大紅色的盒子就像說它是一個紅色的大盒子一樣。如果不是(如「大白鯊」),那麼這些形容詞就不是真正的名詞定語限定詞,並且不應該用XML作爲屬性建模。

+0

我還沒有注意到作者的觀點:(:(他曾經說過)*當你處理包含其他元素的元素時,順序沒有問題,*另一方面,他說*當您處理同一級別上的元素時 - 同級元素 - 文檔順序指定它們應該按原始XML文檔中的順序排列。* –

+1

我不確定您不明白哪部分內容。 –

+0

我在評論中提到的這一行與我衝突,因此我感到困惑。 –