如何从xml、xslt获得正确的结果?

如何从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

我想试试这个例子:

文件: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>
    <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&#xA;&#xA;</xsl:text>
    <xsl:for-each select="address[count(.|key('address',state)[1])=1]">
      <xsl:sort select="state"/>
      <xsl:value-of select="concat('&#x9;',state,'&#xA;')"/>
      <xsl:for-each select="key('address',state)">
        <xsl:value-of select="concat('&#x9;',
          first-name,' ',last-name,
          ', ',city,'&#xA;')"/>
      </xsl:for-each>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>
Customers grouped by state

    MA
    Mary Smith, Vancouver
    WI
    Doris Smith, New York