使用Variable和XPATH选择元素的值

时间:2010-10-19 03:16:46

标签: xml xslt xpath

我有以下代码片段

<xsl:variable name="cId" value="c001" />

<clients>
    <c001>Mario</c001>
    <c002>Luigi</c002>
</clients>

根据变量的值,我需要在客户端下选择正确的元素。

例如。变量cId的值为c001。 有没有办法让我使用XPATH或XSLT选择c001的值?

我可以这样做,但似乎for-loop有点过于杀人

<xsl:variable name="cId" value="c001" />
<xsl:for-each select="/clients/*">         
    <xsl:variable name="cNode" select="local-name()"/>         
    <xsl:if test="$cNode = $cId">                 
        <xsl:value-of select="."/>
    </xsl:if>
 </xsl:for-each>

上面的代码将返回“Mario”

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这个问题不是很清楚,但你可能想要这样的东西

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:my="my:my">

 <my:catalog>
  <catalog>
    <client>
      <clientid>c001</clientid>
      <clientid>c003</clientid>
      <clientid>c004</clientid>
      <clientid>c005</clientid>
    </client>
  </catalog>
 </my:catalog>

 <xsl:variable name="vCat"
  select="document('')/*/my:catalog"/>

 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select=
  "/clients/*
       [name() = $vCat/catalog/client/clientid]
         /text()
  "/>
 </xsl:template>
</xsl:stylesheet>

将此转换应用于以下XML文档

<clients>
    <c001>Stars Company</c001>
    <c002>Bold Unregistered</c002>
</clients>

生成了想要的结果

Stars Company