有人可以帮助我在下面一个以逗号分隔的字符串中提取所有XML元素的要求吗?
XML
<ClassNumbers>
<class>
10433
</class>
<class>
11980
</class>
<class>
13799
</class>
<class>
17392
</class>
<class>
11234
</class>
</ClassNumbers>
期望的输出:
10433,11980,13799,17392,11234
欢迎使用XPATH / XSLT解决此问题的任何建议。
答案 0 :(得分:3)
答案 1 :(得分:2)
XSLT 1.0选项......
<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="text()">
<xsl:value-of select="normalize-space()"/>
<xsl:if test="following::text()">,</xsl:if>
</xsl:template>
</xsl:stylesheet>
根据评论进行编辑...
XML输入
<ListofCLassNbrs xmlns="getClassNumberData">
<ClassNumberData>
<ClassNumber>45</ClassNumber>
</ClassNumberData>
<ClassNumberData>
<ClassNumber>46</ClassNumber>
</ClassNumberData>
<ClassNumberData>
<ClassNumber>47</ClassNumber>
</ClassNumberData>
</ListofCLassNbrs>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<ClassNumberData>
<xsl:apply-templates/>
</ClassNumberData>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="normalize-space()"/>
<xsl:if test="following::text()">,</xsl:if>
</xsl:template>
</xsl:stylesheet>
XML输出
<ClassNumberData>45,46,47</ClassNumberData>
如果出于某种原因需要专门匹配ClassNumber
,可以将命名空间绑定到前缀...
<xsl:stylesheet version="1.0"
xmlns:x="getClassNumberData"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="x">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<ClassNumberData>
<xsl:apply-templates/>
</ClassNumberData>
</xsl:template>
<xsl:template match="x:ClassNumber">
<xsl:value-of select="normalize-space()"/>
<xsl:if test="following::text()">,</xsl:if>
</xsl:template>
</xsl:stylesheet>
答案 2 :(得分:1)
使用XSLT 2.0,您可以使用<xsl:value-of select="//class/normalize-space()" separator=","/>
。确保使用像Saxon 9或XmlPrime