巨大な 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 を処理する必要がある (独自の) アプリケーションが、XML をロードできません。