我需要将输入参数字符串(如“1-410000 54-420987 63-32000”)转换为xslt中的结构(如下所示),以便稍后在xslt中使用其数据:
<config:categories>
<category>
<value>410000</value>
<label>1</label>
</category>
<category>
<value>420987</value>
<label>54</label>
</category>
<category>
<value>32000</value>
<label>63</label>
</category>
</config:categories>
P.S。 是否有任何其他选项来解析字符串,如“1-410000 54-420987 63-32000”,以便在xslt中使用其数据来提取正确的部分(在' - '之后),如果在输入文档中找到左侧部分?
答案 0 :(得分:2)
此转化:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:config="some:config" exclude-result-prefixes="config">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="pData" select="'1-410000 54-420987 63-32000'"/>
<xsl:template match="/*">
<config:categories>
<xsl:call-template name="gen"/>
</config:categories>
</xsl:template>
<xsl:template name="gen">
<xsl:param name="pGen" select="$pData"/>
<xsl:if test="$pGen">
<xsl:variable name="vChunk" select=
"substring-before(concat($pGen, ' '), ' ')"/>
<category>
<value><xsl:value-of select="substring-after($vChunk,'-')"/></value>
<label><xsl:value-of select="substring-before($vChunk,'-')"/></label>
</category>
<xsl:call-template name="gen">
<xsl:with-param name="pGen" select="substring-after($pGen, ' ')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
应用于任何XML文档(未使用)时,会生成所需的正确结果:
<config:categories xmlns:config="some:config">
<category>
<value>410000</value>
<label>1</label>
</category>
<category>
<value>420987</value>
<label>54</label>
</category>
<category>
<value>32000</value>
<label>63</label>
</category>
</config:categories>
<强>解释强>:
正确使用 substring-before()
和 substring-after()
加递归。
答案 1 :(得分:2)
正如Dimitre所示,在XSLT 1.0中解析字符串非常麻烦。这是XSLT 2.0远远优于的领域。可以这样做:
<categories>
<xsl:for-each select="tokenize($param, '\s+')">
<category>
<label><xsl:value-of select="substring-after(., '-')"/></label>
<value><xsl:value-of select="substring-before(., '-')"/></value>
</category>
</xsl:for-each>
</categories>
当然,在XSLT 2.0中,您可以将类别结构用作第一类节点值,而无需使用node-set()扩展来进入其中。
答案 2 :(得分:0)
从字符串生成XML我认为你必须使用Java。我不知道实现这一点的XSLT功能。
对于你的第二个问题: substring(),string-length(),substring-before()和substring-after()可能对您的请求有所帮助。 请参阅:http://www.w3schools.com/xpath/xpath_functions.asp
祝你好运, 彼得