如何从xml、xslt获得正确的结果?
我想试试这个例子: 文件:Data.xml如何从xml、xslt获得正确的结果?,xml,xslt,Xml,Xslt,我想试试这个例子: 文件:Data.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="Transform.xslt"?> <addressbook> <address> <first-name>Doris</first-name> <last-name>Smith</last-name> &l
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="Transform.xslt"?>
<addressbook>
<address>
<first-name>Doris</first-name>
<last-name>Smith</last-name>
<city>New York</city>
<state>WI</state>
</address>
<address>
<first-name>Mary</first-name>
<last-name>Smith</last-name>
<city>Vancouver</city>
<state>MA</state>
</address>
但我得到的是:
多丽丝·史密斯纽约WI玛丽·史密斯温哥华MA
如果您能向我解释这个问题,我将不胜感激。您似乎正在使用浏览器根据xml文件中的
xml样式表处理XSLT
不幸的是,如果没有或之类的东西,您将无法在浏览器中运行XSLT2.0转换
这里有一个XSLT 1.0选项,它使用的是应该可以工作的
XML输入
<?xml-stylesheet type="text/xsl" href="Transform.xslt"?>
<addressbook>
<address>
<first-name>Doris</first-name>
<last-name>Smith</last-name>
<city>New York</city>
<state>WI</state>
</address>
<address>
<first-name>Mary</first-name>
<last-name>Smith</last-name>
<city>Vancouver</city>
<state>MA</state>
</address>
</addressbook>
Customers grouped by state
MA
Mary Smith, Vancouver
WI
Doris Smith, New York
如果您试图使用浏览器来处理XSLT(这是基于xml样式表
处理指令的外观),您将无法使用XSLT2.0(这意味着您不能对每个组使用xsl:foreach group
;您必须使用)。不过XSLT2.0做得不错。当使用2.0处理器时,它确实给出了预期的结果。()您基本上看到的是原始XML中没有标记的文本,这强烈表明问题在于调用(或未能调用)转换的方式,而不是XSLT代码本身。
<?xml-stylesheet type="text/xsl" href="Transform.xslt"?>
<addressbook>
<address>
<first-name>Doris</first-name>
<last-name>Smith</last-name>
<city>New York</city>
<state>WI</state>
</address>
<address>
<first-name>Mary</first-name>
<last-name>Smith</last-name>
<city>Vancouver</city>
<state>MA</state>
</address>
</addressbook>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:key name="address" match="address" use="state"/>
<xsl:template match="/addressbook">
<xsl:text>Customers grouped by state

</xsl:text>
<xsl:for-each select="address[count(.|key('address',state)[1])=1]">
<xsl:sort select="state"/>
<xsl:value-of select="concat('	',state,'
')"/>
<xsl:for-each select="key('address',state)">
<xsl:value-of select="concat('	',
first-name,' ',last-name,
', ',city,'
')"/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Customers grouped by state
MA
Mary Smith, Vancouver
WI
Doris Smith, New York