XSLT объединяет информацию из связанных узлов - PullRequest
0 голосов
/ 17 ноября 2011

Я ищу таблицу стилей XSLT (1.0). У меня есть вход, похожий на этот:

<?xml version="1.0" encoding="ISO-8859-1"?>

<city country="USA">
Washington
</city> 

<city country="USA">
New York
</city> 

<city country="Germany">
Berlin
</city> 

<country size="big">
USA
</country>


<country size="small">
Germany
</country>

Я хочу вывод как это:

Country USA 
Size: big
Cities: 
Washington
New York

Country Germany
Size: small
Cities:
Berlin

Я пытаюсь сделать что-то похожее на вложенный цикл for-each. Но я не знаю, как получить доступ к узлу, когда я внутри другого узла.

Если это повторяющийся вопрос, я прошу прощения: проблема может заключаться в том, что я действительно не знаю, как выразить свою проблему, чтобы найти похожие вопросы.

1 Ответ

2 голосов
/ 17 ноября 2011

Вложенные циклы не нужны.Следующая таблица стилей:

<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="/">
        <xsl:apply-templates select="/*/country"/>
    </xsl:template>
    <xsl:template match="country">
        <xsl:text>Country </xsl:text> 
        <xsl:value-of select="."/>
        <xsl:text>&#xa;Size: </xsl:text>
        <xsl:value-of select="@size"/>
        <xsl:text>&#xa;Cities:&#xa;</xsl:text>
        <xsl:apply-templates select="../city[@country=current()/text()]"/>
        <xsl:text>&#xa;</xsl:text>
    </xsl:template>
    <xsl:template match="city">
        <xsl:apply-templates/>
        <xsl:text>&#xa;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

Применяется к этому входу:

<root>
    <city country="USA">Washington</city>
    <city country="USA">New York</city>
    <city country="Germany">Berlin</city>
    <country size="big">USA</country>
    <country size="small">Germany</country>
</root>

Производит:

Country USA
Size: big
Cities:
Washington
New York

Country Germany
Size: small
Cities:
Berlin

Примечание: Введенный вами вводвключает много значительных пробелов, которые я удалил в своем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...