2016-03-09 5 views
0

Я хотел бы создать таблицу атрибутов значений foo и bar, для каждого узла. Проблема заключается в том, что они находятся в вложенной структуры, как это и я не знаю, как получить их все:Исчерпывание вложенных XML-атрибутов с помощью XSLT

<node begin="1" end="2"> 
    <node foo="lol" bar="lol2"> 
    <node foo="lol" bar="lol2"> 
    <node begin="2" end="3"> 
    <node foo="lol" bar="lol2"> 
    <node foo="lol" bar="lol2"> 
    etc.. 

формат я хотел бы, как это:

lol lol2 
lol lol2 
etc.. 

ответ

1

Ну, выбрать все узлы с

<xsl:template match="/"> 
    <table> 
    <xsl:apply-templates select="//node[@foo and @bar]"/> 
    </table> 
</xsl:template> 

, а затем преобразовать каждый такой узел в строке таблицы:

<xsl:template match="node"> 
    <tr> 
    <td> 
     <xsl:value-of select="@foo"/> 
    </td> 
    <td> 
     <xsl:value-of select="@bar"/> 
    </td> 
    </tr> 
</xsl:template> 
+0

Да, спасибо! .. Это сделал трюк для меня! – Brutalized

1

по умолчанию XSLT processing model траверсы всего дерева, так что вам нужно только, чтобы остановить в узлах вы заинтересованы в Учитывая хорошо сформированные ввода, такие как:.

XML

<node begin="1" end="2"> 
    <node foo="a" bar="100"/> 
    <node foo="b" bar="200"/> 
    <node begin="2" end="3"> 
     <node foo="c" bar="300"/> 
     <node foo="d" bar="400"> 
     <node foo="e" bar="500"/> 
     </node> 
    </node> 
</node> 

следующая таблица стилей:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="text" encoding="UTF-8"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node[@foo and @bar]"> 
    <xsl:value-of select="@foo"/> 
    <xsl:text>&#9;</xsl:text> 
    <xsl:value-of select="@bar"/> 
    <xsl:text>&#10;</xsl:text> 
    <xsl:apply-templates/> 
</xsl:template> 

</xsl:stylesheet> 

вернется:

a 100 
b 200 
c 300 
d 400 
e 500 
+0

Также хорошее решение спасибо! – Brutalized