如何使用xsl创建xml的动态节点名称?
我是xsl领域的新人。我有以下的XML格式。如何使用xsl创建xml的动态节点名称?
<root>
<docs>
<doc>
<actor_name_1>aaa</actor_name_1>
<url_1>dddd</url_1>
</doc>
<doc>
<actor_name_2>bbb</actor_name_2>
<url_2>dddd</url_2>
</doc>
<doc>
<actor_name_3>ccc</actor_name_3>
<url_3>dddd</url_3>
</doc>
</docs>
</root>
我想要得到与数字小的动态值(如1,2等)在XSLT <actor_name_>
节点的值。像作为
<xsl:for-each select="//root/docs/doc">
<xsl:value-of select="actors_name_">position()</xsl:value-of>
<xsl:value-of select="url_">position()</xsl:value-of>
</xsl:for-each>
输出将被..
Actor 1 aaaa url 1 ddddd
Actor 2 bbb url 2 ddddd
Actor 3 ccc url 3 sss
请帮助我。如何获得节点的动态值?
您可以使用starts-with()
函数来检查节点名称。以下代码片段将帮助您获取来自<actor_name_*>
和<url_*>
节点的所有值。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="utf-8" />
<xsl:strip-space elements="*" />
<xsl:template match="/">
<xsl:for-each select="//root/docs/doc">
<xsl:variable name="index" select="position()" />
<xsl:variable name="actorName" select="./*[starts-with(local-name(), 'actor_name_')]" />
<xsl:variable name="url" select="./*[starts-with(local-name(), 'url_')]" />
<xsl:value-of select="concat('Actor ', $index, ' ', $actorName, ' url ', $index, ' ', $url, ' ')" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
另外,通过@迈克尔所建议的,请检查附加数量的节点作为节点都在相同的父即<doc>
内重复和编号是没有必要的要求。
#Aniket谢谢你的回答。请现在根据我的xml解释。 –
请分享您的输出XML的外观。基于输出XML,可以共享具体答案。 –
我添加了输出,我想要的。请解释一下。 –
这个问题并不完全清楚。如果 - 因为它似乎 - 你想制作一个制表符分隔文本文件作为输出,你很可能做的只是:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/root">
<xsl:for-each select="docs/doc">
<xsl:text>Actor </xsl:text>
<xsl:value-of select="position()" />
<xsl:text>	</xsl:text>
<xsl:value-of select="*[1]" />
<xsl:text>	</xsl:text>
<xsl:text>url </xsl:text>
<xsl:value-of select="position()" />
<xsl:text>	</xsl:text>
<xsl:value-of select="*[2]" />
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
应用到给定的例子,结果会成为:
Actor 1 aaa url 1 dddd
Actor 2 bbb url 2 dddd
Actor 3 ccc url 3 dddd
请修改您的问题并添加预期结果。还解释了为什么你需要为'actor_name'节点编号,当它们已经编号时(更不用说这样的编号是不好的做法)。 –
是的,这是不好的做法。但是xml不是由我创建的,它是由某个客户端提供的。我添加了输出。请帮帮我。感谢您的评论。 –
所需变革的逻辑尚不完全清楚。 –