我正在寻找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循环的东西。但是当我在另一个节点内部时,我不知道如何访问节点。
如果这是一个重复的问题,我很抱歉:问题可能是我真的不知道如何表达我的问题以找到类似的问题。
答案 0 :(得分:2)
不需要嵌套循环。以下样式表:
<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>
Size: </xsl:text>
<xsl:value-of select="@size"/>
<xsl:text>
Cities:
</xsl:text>
<xsl:apply-templates select="../city[@country=current()/text()]"/>
<xsl:text>
</xsl:text>
</xsl:template>
<xsl:template match="city">
<xsl:apply-templates/>
<xsl:text>
</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
注意:您提供的输入包含很多重要的空白,我在示例中删除了这些空白。