我有以下结构的XML程序
<Part>
<ID>1</ID>
<Density>3</Density>
<Parameter>
<Element>Alloy</Element>
</Parameter>
</Part>
我想创建一个XSL,它以这样的方式转换这个XML
ID 1
Density 3
Element Alloy
我怎么能这样做?有人可以帮我解决这个问题......
答案 0 :(得分:3)
您没有指定所需的输出类型,但我会猜测HTML,而不是重要的是可以使用相同的原则。我也猜测Parameter
元素可能包含各种具有不同标记名称的元素。
然后是变换: -
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="Part">
<html>
<div>
<xsl:text>ID </xsl:text>
<xsl:value-of select="ID" />
</div>
<div>
<xsl:text>Density </xsl:text>
<xsl:value-of select="Density" />
</div>
<xsl:for-each select="Parameter/*">
<div>
<xsl:value-of select="name()" />
<xsl:text> </xsl:text>
<xsl:value-of select="." />
</div>
</xsl:for-each>
</html>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:3)
一个较短的变换,说明了一些方便的技巧:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:strip-space elements="*"/>
<xsl:variable name="newline"><xsl:text>
</xsl:text></xsl:variable>
<xsl:template match="text()">
<xsl:value-of select="concat(local-name(..),' ',normalize-space(.),$newline)"/>
</xsl:template>
</xsl:stylesheet>
或者,添加以下转换会忽略所有非叶文本节点:
<xsl:template match="*[*]"><xsl:apply-templates/></xsl:template>
答案 2 :(得分:2)
此示例呈现没有子元素的元素的名称和文本内容。
输出具有以下功能:
<xsl:text/>
这是“text”示例代码:
<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="*[not(*)]">
<xsl:value-of select="local-name()" />
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space(.)" />
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
答案 3 :(得分:2)
作为Lachlan代码的替代品,您也可以尝试
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="text()">
<xsl:if test="normalize-space(.)">
<xsl:value-of select="local-name(parent::*)" />
<xsl:text> </xsl:text>
<xsl:value-of select="normalize-space(.)" />
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
答案 4 :(得分:1)
您需要查看name()函数。
<xsl:value-of select="name()"/>