1

巨大な 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 をロードできません。

4

1 に答える 1

0

使用している XSLT プロセッサを教えていただけると助かります。

"]]>"シリアライザーは、CDATA セクションにそのシーケンスが合法的に表示されないため、データ内で遭遇した場合、CDATA セクションを閉じて再度開く必要があります。仕様ではおそらく禁止されていませんが、他の状況ではそうする必要はありません。

于 2013-09-10T08:46:19.607 に答える