我可以使用什麼XPath來測試父級,以查看它是否只有一個與其自己具有相同名稱的子女 (子元素或女兒)。
使用:
/*/parent
[count(*[self::daughter or self::son]) =1
and
name = *[self::daughter or self::son]/name
]
這裏選擇被命名爲parent
頂部元素的所有孩子,都只有一個子元素(除了name
子)及其name
孩子的字符串值與其他(非name
)孩子的name
孩子的字符串值相同。
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=
"/*/parent
[count(*[self::daughter or self::son]) =1
and
name = *[self::daughter or self::son]/name]
"/>
</xsl:template>
</xsl:stylesheet>
當這個變換所提供的XML文檔施加(具有校正的許多錯誤,使其充分形成的):
<root>
<parent>
<name>Luiz</name>
<son><name>Luiz</name></son>
<daughter><name>Cristina</name></daughter>
</parent>
<parent>
<name>Cristina</name>
<daughter><name>Cristina</name></daughter>
</parent>
<parent>
<name>Carolina</name>
<daughter><name>Cristina</name></daughter>
</parent>
</root>
它評估XPath表達式並輸出所有選擇的節點(在這種情況下只有一個):
<parent>
<name>Cristina</name>
<daughter>
<name>Cristina</name>
</daughter>
</parent>
第一個'name'是「Luiz」的父母呢?它只有一個和自己同名的孩子?你想排除,因爲有一個「女兒」不同的名字? –
是的,我需要能夠判斷是否只有一個孩子(不管是兒子還是女兒),而且這個孩子是以父母的名字命名的。 –