我想替换一个巨大的 XML 文件中的一些项目,我想我会用 XSLT 来做。我完全没有这方面的经验,所以如果你认为有更好的方法可以做到这一点,请告诉我。
无论如何,作为第一步,我只想复制整个 XML。这是我的 xsl 文件:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="no" cdata-section-elements="script"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
相关的Java代码是:
Source xmlInput = new StreamSource(oldProjectStream);
Source xsl = new StreamSource("test.xsl");
Transformer transformer = TransformerFactory.newInstance().newTransformer(xsl);
StreamResult xmlOutput = new StreamResult("output/project.xml");
transformer.transform(xmlInput, xmlOutput);
大多数输出都很好,元素的顺序也没有改变(这可能非常重要)。
XML 在 CDATA 部分中包含一些 Lua 代码。然而,在某些(看似随机的)点,CDATA 部分关闭并再次重新打开。它似乎与代码中的括号有关,但只是速率 - 在 1.4 MB XML 中大约有 5 个点,如下所示:
<script><![CDATA[
...
html_encoding["Otilde" ] = string.char(213)
html_encoding["Ouml" ]]]><![CDATA[ = string.char(214)
html_encoding["Oslash" ] = string.char(216)
...
]]></script>
在原始文件中,中间行看起来和其他行一样。我把点放在了成千上万行的地方。这里发生了什么?
应该处理 XML 的(专有)应用程序无法加载它。