https://xsltfiddle.liberty -development.net / 94AbWB6 / 2
В этом примере я пытаюсь сопоставить список <persons>
, чей <person>.<lastname>
не соответствует всем другим лицам внутриэтот список.
<root>
<persons>
<person>
<lastname>doe</lastname>
</person>
<person>
<lastname>done</lastname>
</person>
</persons>
<persons>
<person>
<lastname>name</lastname>
</person>
<person>
<lastname>name</lastname>
</person>
</persons>
</root>
Во втором списке <lastname>name</lastname>
всегда равен. Но в 1-м списке фамилия отличается. Так что я ожидаю, что следующий xslt
выдаст doe
. Но это не так:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="/root">
<xsl:for-each select="persons">
<xsl:variable name="lastname" select="person[1]/lastname"/>
<xsl:if test="not(person/lastname = $lastname)">
<xsl:text>lastnames should be the same: </xsl:text>
<xsl:value-of select="$lastname"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Sidenote: Я не хочу определять, какой именно человек имеет другую фамилию. Я только хочу выяснить , если любой человек в списке людей имеет другое.
Таким образом, вопрос можно перефразировать так: как извлечь все <lastname>
как Set
и проверьте, если set.size != 1
?