2013-06-26 2 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 для всех «известных» узлов, если вы можете добавить шаблон match = «*», который «запускает все« другие »узлы. –

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