Мне просто нужно проверить, равен ли "pp" коту матери
атрибут.
Хороший вопрос, + 1.
Проще, чем все остальные имеющиеся ответы :
/*/mother/@cat = 'pp'
Это оценивается как true()
точно в том случае, когда "pp"
равно строковому значению атрибута cat
элемента mother
, который является дочерним элементом верхнего элемента XML-документа.
Для этого примера да, это так. Но это должно быть ложным для "пр".
Еще раз, оцените :
/*/mother/@cat = 'pr'
Ниже приведено простое преобразование, показывающее это в действии :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
/*/mother/@cat = 'pp' is <xsl:text/>
<xsl:value-of select="/*/mother/@cat = 'pp'"/>
/*/mother/@cat = 'pr' is <xsl:text/>
<xsl:value-of select="/*/mother/@cat = 'pr'"/>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML :
<rules>
<mother cat="pp">
<daughter cat="pr"/>
<daughter cat="np"/>
</mother>
<mother cat="wp">
<daughter cat="rp"/>
<daughter cat="vp"/>
</mother>
<mother cat="cn">
<daughter cat="jj"/>
<daughter cat="cn"/>
</mother>
<mother cat="np">
<daughter cat="jj"/>
<daughter cat="np"/>
</mother>
</rules>
желаемый, правильный результат выдается :
/*/mother/@cat = 'pp' is true
/*/mother/@cat = 'pr' is false