我必须将复杂的xml转换为html。我可以转换一些节点,但是有很多节点意义不明。这里是简化的xml
<root>
<NodeWithKnownData>
<FirstElement>blah</FirstElement>
<SecondElement>blahBlah</SecondElement>
</NodeWithKnownData>
<NodeWithUnKnownData>
<FirstUnknownElement>blah2134</FirstUnknownElement>
<SecondUnknownElement>blahBlah324523</SecondUnknownElement>
</NodeWithUnKnownData>
<NodeWithRandomNatureData>
<KnownElement>blah2134</KnownElement>
<UnknownElement>blahBlah324523</UnknownElement>
<NewUnknownElement>
<KnownNode2>test</KnownNode2>
<KnownElement>
<KnownNode3>test5654</KnownNode3>
<UnknownNode>test2342345</UnknownNode>
</KnownElement>
</NewUnknownElement>
</NodeWithRandomNatureData>
</root>
我只有已知元素的模板。我必须使用我的模板并将未知节点显示为“节点名称”:“值”。请帮帮我。
更新
用于区分已知节点和未知节点的规则 - 仅用于已知节点的模板。 如果我使用这个模板:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xhtml" omit-xml-declaration="yes"/>
<xsl:template match="root">
<xsl:apply-templates select="/NodeWithKnownData"/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*">
<xsl:value-of select="local-name()"/> : <xsl:value-of select="."/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="NodeWithKnownData">
some useful actions
</xsl:template>
</xsl:stylesheet>
重复每个子节点。
答案 0 :(得分:0)
我稍微修改了DaveInAZ的答案,以返回类似于原始XML的内容。对于我的应用程序,我正在尝试开发自定义的Win-911(Win911)通知格式,但是我不知道XML必须提供哪些节点。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="*[not(*)]">
<xsl:text><</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:text>></xsl:text>
<xsl:value-of select="."/>
<xsl:text></</xsl:text>
<xsl:value-of select="local-name()"/>
<xsl:text>></xsl:text>
<br/>
</xsl:template>
<xsl:template match="*[(*)]">
<xsl:text><</xsl:text>
<strong>
<xsl:value-of select="local-name()"/>
</strong>
<xsl:text>></xsl:text>
<br/>
<xsl:apply-templates/>
<xsl:text></</xsl:text>
<strong>
<xsl:value-of select="local-name()"/>
</strong>
<xsl:text>></xsl:text>
<br/>
</xsl:template>
</xsl:stylesheet>