我在使用XSLT时遇到了一些问题。
我有这个XML文件:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="XSLTest.xsl"?>
<pages>
<page>
<title>New Title</title>
<id>4782</id>
<timestamp>2012-09-13 13:15:33</timestamp>
<contributor>
<username>kf</username>
<id>2</id>
</contributor>
<text xml:space="preserve">
some text
</text>
</page>
</pages>
和这个XSL文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="pages/page">
<content>
<id><xsl:value-of select="id"/></id>
<title><xsl:value-of select="title"/></title>
<created><xsl:value-of select="timestamp"/></created>
<created_by><xsl:value-of select="contributor/username"/></created_by>
</content>
</xsl:for-each>
</xsl:template>
现在我的问题:
XML文件转换只能部分工作。除了标题,我得到了我想要的所有值。
我想将转换后的代码保存到新的XML文件中。
迭代是必要的,因为我想要更改的原始文件要大得多<pages>
。
答案 0 :(得分:1)
XML文件转换只能部分工作。除了标题,我得到了我想要的所有值。 (...)我不知道为什么它不能在w3的webeditor上工作
永远不要相信w3schools上的任何内容 - 它们与W3C没有任何关系,并且不能期望它们的工具符合规范。我强烈建议您再也不要使用该站点来测试XSLT转换。在撰写本文时,http://xsltransform.net是一个很好的选择,可以依赖。
我想将转换后的代码保存到新的XML文件中。
查看XML文档中的样式表引用:
<?xml-stylesheet type="text/xsl" href="XSLTest.xsl"?>
您似乎正在浏览器中进行此转换。所有主流浏览器都包含XSLT 1.0处理器,但它们不允许您将转换结果保存为文件。在浏览器中,转换旨在促进数据的显示,而不是对文档进行永久性更改。
要将输出保存到文件,您需要
关于XSLT版本的最后评论:
您的样式表表明代码应该使用XSLT 2.0版:
<xsl:stylesheet version="2.0">
但目前没有浏览器支持XSLT 2.0。要使用特定于XSLT 2.0的功能(您不使用任何功能),您需要一个XSLT 2.0处理器。
答案 1 :(得分:0)
我遇到了类似的问题,并且发现可以使用Google Chrome浏览器来应用xslt转换。我将在这里记录该过程,因为我已经忘记了如何做。
这是一个示例xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="sort.xslt"?>
<employees>
<employee hireDate="04/23/1999">
<last>Hill</last>
<first>Phil</first>
<salary>100000</salary>
</employee>
<employee hireDate="09/01/1998">
<last>Herbert</last>
<first>Johnny</first>
<salary>95000</salary>
</employee>
<employee hireDate="08/20/2000">
<last>Hill</last>
<first>Graham</first>
<salary>89000</salary>
</employee>
<employee hireDate="08/20/2001">
<last>Hill</last>
<first>Albert</first>
<salary>110000</salary>
</employee>
</employees>
这是对应的xslt(sort.xlst):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="employees">
<xsl:copy>
<xsl:apply-templates select="employee">
<xsl:sort select="salary" data-type="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
首先,将它们都放在同一文件夹中。然后使用--allow-file-access-from-files
标志启动Google chrome。然后在chrome中打开xml文件。 xml将呈现为:
Hill Graham 89000 Herbert Johnny 95000 Hill Phil 100000 Hill Albert 110000
如您所见,所有xml标记都丢失了。但是,右键单击该页面,然后选择“检查”以启动开发人员控制台。在开发人员控制台中,选择“元素”选项卡。右键单击<employees>
顶级标签,然后从菜单中选择“复制->复制externalHTML”。在您选择的文本编辑器中打开一个新文档,然后粘贴转换后的xml。在我的示例中,它看起来像这样:
<employees>
<employee hireDate="08/20/2000">
<last>Hill</last>
<first>Graham</first>
<salary>89000</salary>
</employee>
<employee hireDate="09/01/1998">
<last>Herbert</last>
<first>Johnny</first>
<salary>95000</salary>
</employee>
<employee hireDate="04/23/1999">
<last>Hill</last>
<first>Phil</first>
<salary>100000</salary>
</employee>
<employee hireDate="08/20/2001">
<last>Hill</last>
<first>Albert</first>
<salary>110000</salary>
</employee>
</employees>
如您所见,转换后的xml已恢复,现在可以保存。