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>&</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>&</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)
| 归档时间: |
|
| 查看次数: |
23044 次 |
| 最近记录: |