Я хочу заменить некоторые элементы в огромном файле 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 содержит некоторый код Lua в разделах CDATA. Однако в некоторых (кажущихся случайными) точках раздел CDATA закрывается и снова открывается. Кажется, это связано со скобками в коде, но в меру - в 1,4-мегабайтном 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, не может его загрузить.
cdata-section-elements
. CDATA — это удобная функция, которая совершенно не нужна в XML. Если ваше проприетарное целевое приложение вообще может обрабатывать XML, оно будет работать. Опять же, если ваше проприетарное целевое приложение вообще может обрабатывать XML, оно уже должно работать. - person Tomalak   schedule 10.09.2013<
и>
легко кодируются как<
и>
в XML, так что это вовсе не ограничение. - person Tomalak   schedule 10.09.2013