问题:给定xml文件,使用xslt
获取值为'sam'的content / id标记的值问题:所有匹配相同路径的值都会被选中。布莱恩和萨姆都是。
(我想知道选择应该选择第一个匹配,不应该像xslt中提供的每个实用程序一样循环)
XML :
<?xml version="1.0" encoding="UTF-8"?>
<Primary>
<PID>Tech1</PID>
<Version>1234</Version>
<AData>
<Id>widnows</Id>
</AData>
<BData>
<Content>
<Id>brian</Id>
</Content>
<Content>
<Id>sam</Id>
</Content>
</BData>
</Primary>`
XSLT
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Primary">
<xsl:variable name="var" select="'sam'" />
<xsl:apply-templates select="BData/Content">
<xsl:if test="Id='sam'">
<xsl:value-of select="Id"/>
</xsl:if>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
您目前有一个语句作为
xsl:if
的子级,在XSLT中是不允许的。如果您只想选择xsl:apply-templates
值为&#34; sam&#34;的Content
元素,您可以将条件放在Id
的select属性中,就像这样
apply-templates
尝试这样的事情:
<xsl:apply-templates select="BData/Content[Id='sam']" />
编辑:方括号内的表达式不必只是等于,它可以是任何有效的表达式,例如,如果您只想要<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Primary">
<xsl:variable name="var" select="'sam'" />
<xsl:apply-templates select="BData/Content[Id=$var]" />
</xsl:template>
<xsl:template match="Content">
<xsl:value-of select="Id" />
</xsl:template>
</xsl:stylesheet>
以&#34开头的Content
个元素; SAM&#34;或者&#34; bob&#34;,你会这样做:
Id