2013-06-26 88 views
0

我必須將複雜的xml轉換爲html。我可以轉換一些節點,但有很多節點的含義未知。這裏是簡體xmlxslt - 如何輸出所有節點作爲節點名稱和節點值

<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> 

每個子節點recursevily重複。

+0

應該是什麼未知節點區分知道的規則嗎?你有所有「已知」節點的xslt模板,如果是的話,你可以添加一個模板匹配=「*」,其中「觸發所有」其他「節點。 –

+0

我已經更新了我的問題,回答了你的問題 – Bujaka

回答

1

我意識到這是一個老問題/答案,但對於現在看到它的任何人來說,由OP給出的答案包括一些不必要的模板,這使得它更容易混淆。這個簡化的版本產生完全相同的輸出,而不需要指定任何已知或未知的節點名稱。代碼是OP的。我不知道他是否意識到當時它是如何工作的,但是一旦不必要的部分被刪除,它實際上是非常優雅的。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
<xsl:output method="xhtml" omit-xml-declaration="yes"/> 
<xsl:template match="*[not(*)]"> 
    <xsl:value-of select="local-name()"/> : <xsl:value-of select="."/> 
</xsl:template> 
<xsl:template match="*[(*)]"> 
    <xsl:value-of select="local-name()"/> 
    <xsl:apply-templates/> 
</xsl:template> 

相關問題