這樣簡單 - 不變量,沒有xsl:chose
,沒有xsl:when
,沒有xsl:otherwise
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select=
"/*[header/someId]/results/product[externalId=/*/header/someId]
|
/*[not(header/someId)]/results/product
"/>
</xsl:template>
</xsl:stylesheet>
當這個變換所提供的XML文檔應用:
<output>
<header>
<someId>ABC123</someId>
</header>
<results>
<product id="A">
<externalId>XYZ666</externalId>
<title>some title a</title>
</product>
<product id="B">
<externalId>ABC123</externalId>
<title>some title b</title>
</product>
<product id="C">
<externalId>666777</externalId>
<title>some title c</title>
</product>
</results>
</output>
的希望,正確的結果產生:
<product id="B">
<externalId>ABC123</externalId>
<title>some title b</title>
</product>
當同樣的變換被應用到這個XML文檔:
<output>
<results>
<product id="A">
<externalId>XYZ666</externalId>
<title>some title a</title>
</product>
<product id="B">
<externalId>ABC123</externalId>
<title>some title b</title>
</product>
<product id="C">
<externalId>666777</externalId>
<title>some title c</title>
</product>
</results>
</output>
再次通緝,正確的結果產生:
<product id="A">
<externalId>XYZ666</externalId>
<title>some title a</title>
</product>
<product id="B">
<externalId>ABC123</externalId>
<title>some title b</title>
</product>
<product id="C">
<externalId>666777</externalId>
<title>some title c</title>
</product>
說明:
我們使用一個通用的方法來選擇一個節點集合(由表達式Exp1
)當給定的條件someCondition
是true()
,並選擇另一節點集合(由表達式Exp2
)時相同的條件下是false()
。
這兩個表達式是聯合編輯的,每個表達式都可以在兩個互斥的條件下選擇一個節點,因此,根據條件的值,只有一個表達式可以選擇一個節點。
Exp1[someCondition] | Exp2[not(someCondition)]
請不要鏈接到w3schools,這是在StackOverflow廣泛不喜歡(見http://w3fools.com爲什麼)。你可能已經鏈接到一個包含正確信息的頁面,但該網站有很多不正確的和誤導性的信息 - 並以任何方式鏈接到w3schools使其信譽**不**應得的。 (如果您使用Google搜索,並且擁有Google帳戶,則可以[輕鬆阻止搜索結果](來自w3school的http://support.google.com/websearch/bin/answer.py?hl=zh_CN&answer=1210386)) – freefaller