XSLT如果匹配所有XML标记内容

时间:2016-01-17 17:26:13

标签: xml xslt

问题:给定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>

1 个答案:

答案 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