0

我想将 XML 转换为其他格式的 XML,所以我使用了 XSLT。但是tt变成了不好的结果。

XML:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
    <cd>
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
    </cd>
    <cd>
        <title>Hide your heart</title>
        <artist>Bonnie Tyler</artist>
        <country>UK</country>
        <company>CBS Records</company>
        <price>9.90</price>
        <year>1988</year>
    </cd>
    <cd>
        <title>Greatest Hits</title>
        <artist>Dolly Parton</artist>
        <country>USA</country>
        <company>RCA</company>
        <price>9.90</price>
        <year>1982</year>
    </cd>
</catalog>

XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="utf-8" indent="yes" />
<xsl:template match="/">
    <root>
        <items>
            <xsl:for-each select="catalog/cd">
                <item>
                    <xsl:value-of select="artist"/>
                </item>
            </xsl:for-each>
        </items>
    </root>
</xsl:template>
</xsl:stylesheet>

我想要的结果(在浏览器中):

<?xml version="1.0" encoding="utf-8"?>
<root>
    <items>
        <item>Empire Burlesque</item>
        <item>Hide your heart</item>
        <item>Greatest Hits</item>
    </items>
</root>

实际结果(在浏览器中):

Empire Burlesque Hide your heart Greatest Hits

我的 XSLT 有什么问题?

4

3 回答 3

2

您可以将 xsl 更改为:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" encoding="utf-8" indent="yes" />
<xsl:template match="/">
    <root>
        <xsl:for-each select="catalog/cd">
            <items>
                <item>
                    <xsl:value-of select="title"/>
                    <xsl:text xml:space="preserve">&#10;</xsl:text>
                </item>
            </items>
        </xsl:for-each>
    </root>
</xsl:template>
</xsl:stylesheet>

这将在浏览器中生成:

Empire Burlesque
Hide your heart
Greatest Hits

如果你点击它,在 Firefox 中,你选择web developer > view source > view generated source你会得到这个:

<root><items><item>Empire Burlesque
</item></items><items><item>Hide your heart
</item></items><items><item>Greatest Hits
</item></items></root>

这就是你说你想要的。

请记住,在浏览器中您将看到文本,所有不是 html 的标签都被丢弃。如果您检查源代码,您将看到 xml 文件,因为这是您加载的文件。如果您检查生成的源是转换告诉浏览器显示的内容。

默认情况下,浏览器的渲染引擎使用 html,这就是它忽略任何其他标签的原因。

再见

于 2012-10-18T01:57:23.947 回答
2

我敢打赌您正在使用 Firefox,并且它试图将其呈现为 HTML,这意味着它会删除它不理解的标签。尝试右键单击 thpage 并查看源并查看页面的源是否正确。

于 2012-10-18T01:28:59.677 回答
1

您似乎对它在浏览器中的呈现方式感兴趣。在那种情况下,也许这就是你想要的......

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8" indent="yes" />
<xsl:template match="/">
  <xsl:text disable-output-escaping="yes">&lt;!DOCTYPE html&gt;</xsl:text>
  <html>
    <head>
      <meta charset="utf-8" />
      <title>List of CDs</title>
    </head>
    <body>
      <ul>
        <xsl:for-each select="catalog/cd">
          <li><xsl:value-of select="artist"/></li>
      </xsl:for-each>
      </ul>
    </body>
  </html>
</xsl:template>
</xsl:stylesheet>
于 2012-10-18T02:02:37.830 回答