我有这个源XML:
<People>
<Person Name="NameOne"/>
<Person Name="NameTwo"/>
</People>
我有这个XSL:
<?xml version="1.0" encoding="Windows-1250"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:for-each select="People">
<Names>
<Human><xsl:value-of select="Person/@Name"/></Human>
</Names>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
我有这个XML输出:
<Names>
<Human>NameOne</Human>
</Names>
但是我需要所有记录的输出:
<Names>
<Human>NameOne</Human>
<Human>NameTwo</Human>
</Names>
你有什么想法吗?
答案 0 :(得分:2)
问题是您正在迭代人元素
<xsl:for-each select="People">
但您的XML中只有一个 People 元素。您需要“匹配”人元素,然后迭代人元素
试试这个XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="People">
<Names>
<xsl:for-each select="Person">
<Human><xsl:value-of select="@Name"/></Human>
</xsl:for-each>
</Names>
</xsl:template>
</xsl:stylesheet>
或者更好的是,使用完全模板方法,不使用 xsl:for-each
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="People">
<Names>
<xsl:apply-templates select="Person" />
</Names>
</xsl:template>
<xsl:template match="Person">
<Human><xsl:value-of select="@Name"/></Human>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
如果您想使用以下代码,请使用以下代码
<xsl:template match="/">
<Names>
<xsl:for-each select="People/Person">
<Human><xsl:value-of select="@Name"/></Human>
</xsl:for-each>
</Names>
</xsl:template>