通過@Lingamurthy CS給出的答案是錯的。 //c
在輸入XML中找到c
元素任何地方。
而是使用:
<xsl:template match="a[descendant::c]">
其中
a
元素相匹配
,如果它有一個後代元素c
。
爲了證明這一點,假設以下XML輸入。有一個c
元素,但它不是a
的後代。
輸入XML(修改)
<?xml version="1.0" encoding="utf-8"?>
<root>
<a>
</a>
<c>wrong</c>
<a>
<b>
</b>
</a>
</root>
輸出(使用@Lingamurthy CS」模板)
<?xml version="1.0" encoding="UTF-8"?>
<yes/>
wrong
<yes/>
正如你所看到的,test="exists(//c)"
評估在這兩種情況下,以 「真」 - 這是錯誤的。不應輸出yes
元素。
在另一方面,使用:
樣式表
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="a[descendant::c]">
<yes/>
</xsl:template>
</xsl:stylesheet>
應用於相同輸入I以上描述,結果在
輸出(使用descendant::c
)
<?xml version="1.0" encoding="UTF-8"?>
wrong
否輸出yes
元素。由於XSLT處理器的默認行爲,只輸出c
元素的文本內容。 「尋找我?」
嗯,該模板僅用於由Surender提供的輸入XML,它只有一個'a'作爲根節點。 :) –
我知道。這就是我想說的。您的解決方案並不真正檢查'a'元素是否具有後代'c'元素。相反,它檢查是否有'c'元素_at all_。 –