У меня есть простой XML-файл, который представляет собой список атрибутов (пары имя / значение):
<?xml version="1.0" encoding="ISO-8859-1"?>
<Attrs>
<Attr N="IsValid" V="true" />
<Attr N="ID" V="99099" />
</Attrs>
Я хочу создать XSLT-файл, который выводит значения, но я не могу заставить его вернуть значение для атрибута
Вот мой xslt:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Attrs">
<xsl:if test="Attr[@N='IsValid']">
--found IsValid
IsValid 1: <xsl:value-of select="current()/Attr[@V]"/>
IsValid 2: <xsl:value-of select="Attr[@V]"/>
</xsl:if>
<xsl:if test="Attr[@N='ID']">
--found ID
ID 1: <xsl:value-of select="current()/Attr[@V]"/>
ID 2: <xsl:value-of select="Attr[@V]"/>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
Я просто не могу получить значение атрибута 'V' после нахождения соответствующего атрибута Name (N = 'name'). Я не знаю, как выбрать значение @V.
Вот мой вывод:
<?xml version="1.0" encoding="utf-8"?>
--found IsValid
IsValid 1:
IsValid 2:
--found ID
ID 1:
ID 2:
В большинстве случаев я использовал приведенное ниже решение Энтони. Я изменил сопоставление с шаблоном, чтобы он просто использовал Attr, а затем использовал стемент выбора для фильтрации моих имен. В большинстве случаев мне просто нужно значение. В другом случае мне нужно было настроить, это действительно сократило количество шаблонов, которые мне нужны. (Еще раз спасибо за начало в правильном направлении всем, кто помог)
<xsl:template match="Attr">
<xsl:choose>
<xsl:when test="@N='IsValid'">
<xsl:value-of select="@V" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="@V" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>