如何使用XSLT从XML标记中的属性读取值

时间:2013-01-17 09:42:44

标签: xml xslt

我想使用xslt从下面提供的xml代码段中的“name”属性中读取值“inquiry”。任何人都可以帮助我吗?我对xslt完全不熟悉。

提前致谢。 :)

<?table name="enquiry"?>
<thead>
<row rowsep="1">
<entry colname="col1">

2 个答案:

答案 0 :(得分:2)

更通用的方法是定义这样的模板:

  <xsl:template name="GetPIAttribute">
    <xsl:param name="pi" />
    <xsl:param name="attrName" />

    <xsl:variable name="toFind" select="concat(' ', $attrName, '=')"/>
    <xsl:variable name="piAdjusted" select="concat(' ', normalize-space($pi))"/>

    <xsl:variable name="foundMatch" select="substring-after($piAdjusted, $toFind)" />
    <xsl:if test="$foundMatch">
      <xsl:variable name="delimiter" select="substring($foundMatch, 1, 1)" />
      <xsl:value-of select="substring-before(substring-after($foundMatch, $delimiter), $delimiter)"/>
    </xsl:if>
  </xsl:template>

然后你可以调用它来检索你想要的任何伪属性,如下所示:

  <xsl:template match="/">
    <xsl:call-template name="GetPIAttribute">
      <xsl:with-param name="pi" select="/processing-instruction()[name() = 'table']" />
      <xsl:with-param name="attrName" select="'name'" />
    </xsl:call-template>
  </xsl:template>

这种方法的好处在于它可以将值括在单引号或双引号中,并且如果需要提取多个值,则可以重复使用它。

答案 1 :(得分:0)

这实际上不是一个属性。这只是处理指令的价值。

我认为获得价值的唯一方法是通过一些字符串操作......

<xsl:template match="processing-instruction()[name()='table']">
    <xsl:value-of select="substring-before(substring-after(.,'name=&quot;'),'&quot;')"/>
</xsl:template>