這裏是我具備的條件:
If (/person/address[type = "STD"]/addresskey = and /person/address[type = "BA"/addresskey)
那麼我應該得到的/person/phone[2]/telephonenum
。如果第二個 電話號碼不存在,那麼它應該獲得第一個電話號碼 。
我想通過addresskey
你的意思只是key
(有在所提供的XML沒有addresskey
元素)。
此外,XML格式不正確,我不得不糾正即。
現在讓我們滿足規定的要求:
第一:
我應該得到的/person/phone[2]/telephonenum
。
翻譯成這樣:
/*/phone[2]
然後:
如果第二次 電話號碼不存在,那麼它應該得到的第一個電話號碼 。
修改上面的表達式這樣:
/*/phone[not(position() >2)][last()]
最後:
If (/person/address[type = "STD"]/addresskey = and /person/address[type = "BA"/addresskey)
完整的表達式變爲:
/*/phone[not(position() >2)][last()]
[/*/address[type = 'STD']/key
=
/*/address[type = 'BA']/key
]
XSLT - 基於驗證:
<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=
"/*/phone[not(position() >2)][last()]
[/*/address[type = 'STD']/key
=
/*/address[type = 'BA']/key
]
"/>
</xsl:template>
</xsl:stylesheet>
當這個變換所提供的(和校正的)XML施加:
<person>
<address>
<type>STD</type>
<key>1234</key>
</address>
<address>
<type>BA</type>
<key>1234</key>
</address>
<phone>
<type>TEL</type>
<key>1234</key>
<telephonenum>7</telephonenum>
</phone>
<phone>
<type>TEL</type>
<key>1234</key>
<telephonenum>8</telephonenum>
</phone>
<phone>
<type>TEL</type>
<key>1234</key>
<telephonenum>9</telephonenum>
</phone>
</person>
有用節點被選擇和輸出:
<phone>
<type>TEL</type>
<key>1234</key>
<telephonenum>8</telephonenum>
</phone>
二,的XPath 2.0表達式:
for $check in
/*/address[type = 'STD']/key[1]
eq
/*/address[type = 'BA']/key[1],
$p1 in /*[$check]/phone[1],
$p2 in /*[$check]/phone[2]
return
($p2, $p1)[1]
的
可能重複[?是否有一個 「如果 - 那麼 - 否則」 在XPath語句(http://stackoverflow.com/questions/971067/is-there-an-if - 那麼,其他語句合的XPath) –