我有以下结构的XML程序获取XML的子节点的名称使用XSL
<Part>
<ID>1</ID>
<Density>3</Density>
<Parameter>
<Element>Alloy</Element>
</Parameter>
</Part>
我想创造出tranforms这个XML这样一个XSL是
ID 1
Density 3
Element Alloy
我如何能做到这一点?有人可以帮助我...
我有以下结构的XML程序获取XML的子节点的名称使用XSL
<Part>
<ID>1</ID>
<Density>3</Density>
<Parameter>
<Element>Alloy</Element>
</Parameter>
</Part>
我想创造出tranforms这个XML这样一个XSL是
ID 1
Density 3
Element Alloy
我如何能做到这一点?有人可以帮助我...
此示例呈现那些没有子元素的元素的名称和文本内容。
输出具有以下特征:
<xsl: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>
'0 = count(*)'相当于'not(*)'。只是做'
你不指定你想要的输出类型,但我会猜测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>
你需要看名字()函数。
<xsl:value-of select="name()"/>
作为替代拉克兰的代码,你也可以尝试
<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>
为什么父母的“for-each”?给定节点只有一个父代。 '父'轴不是一个函数。你可以消除'for-each'并使用'
@Mads:对,对不起。固定。 – 2010-02-22 12:38:42
较短的变换,说明这几个方便的技巧种类:
<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>
我没有看到这里的XML ... – anthares 2010-02-18 13:12:49
你愿意修复中的示例代码?很高兴看到这些元素。 – 2010-02-18 13:21:21