xslt连接节点中的文本

Mat*_*lfe 3 xml xslt xpath concatenation

我有一个xml文件,如下所示:

<args>
  <sometag value="abc" />
  <anothertag value="def" />
  <atag value="blah" />
</args>
Run Code Online (Sandbox Code Playgroud)

请记住args中的标记名称可以命名为任何东西(我不知道提前)现在我将这个xml文件存储在一个名为$ data的变量中,我使用xslt样式表中的document()调用加载它(不是xslt文件的后备数据)

我想获取该数据并产生以下输出: sometag = abc&anothertag = def&atag = blah

所以(一个非常简化的verison看起来像这样:

<xsl:template>
 <xsl:variable name="data"  select="document('/path/to/xml')" />

  <xsl:call-template name='build_string'>
    <xsl:with-param name='data' select='$data' />

  </xsl:call-template>

</xsl:template>

<!-- here is where i need help -->
<xsl:template name="build_string">
  <xsl:param name='data'>
  <xsl:value-of select='name($data/.)' />=<xsl:value-of select='$data/@value' />

  <xsl:if test='$data/following-sibling::node()'>
    <xsl:text>&#38;</xsl:text>
    <xsl:call-template name="build_str">
     <xsl:with-param name="data" select='$nodes/following-sibling::node()' />
    </xsl:call-template>
  </xsl:if>


</xsl:template>
Run Code Online (Sandbox Code Playgroud)

这几乎可以工作,但它也从输入文件打印文本节点,我不想匹配文本节点..

Dim*_*hev 14

这种转变:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="/*/*">
  <xsl:value-of select="concat(name(),'=',@value)"/>

  <xsl:if test="not(position()=last())">
    <xsl:text>&amp;</xsl:text>
  </xsl:if>
 </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

当应用于提供的XML文档时:

<args>
  <sometag value="abc"/>
  <anothertag value="def"/>
  <atag value="blah"/>
</args>
Run Code Online (Sandbox Code Playgroud)

产生想要的,正确的结果:

sometag=abc&anothertag=def&atag=blah
Run Code Online (Sandbox Code Playgroud)