Я копирую текстовое содержимое нужного мне элемента (который представляет собой встроенный XML-документ) и создаю новый документ из текста, как показано ниже, для доставленного мне формата файла, который я не контролирую. Проблема в том, что иногда я получаю большие (3 МБ+) текстовые значения (файлы xml), доставленные в этот элемент, и синтаксический анализатор дает сбой (пространство кучи java) - я думаю это потому, что value-of не может обрабатывать текст как строка в одном. В идеале я хотел бы просто сделать копию или какое-то преобразование идентичности, чтобы удалить другие элементы или скопировать без буферизации в строку. Правильно ли я думаю, что это проблема, и есть ли способ? (без добавления дополнительной памяти).
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:value-of select="root/toplevel/row/payload" />
</xsl:template>
</xsl:stylesheet>
<?xml version='1.0' ?>
<root>
<toplevel>
<row>
<payload>
<?xml version="1.0" encoding="UTF-8"?>
<documentProperties type="documentProperties">
<producedBy>
<ourName type="string">NAMEHERE</ourName>
<user>Someone</user>
</producedBy>
</documentProperties>
</payload>
<System>NotWanted</System>
</row>
</toplevel>NotWantedEither
</root>
Обратите внимание, что текст в родственных и родительских элементах в конце не нужен и иногда включается в несколько попыток копирования, которые я пробовал. Мне нужно только то, что находится в полезной нагрузке. Этот код работает с этим примером, но не тогда, когда текст превышает ограничение по размеру.
Выход :
<?xml version="1.0" encoding="UTF-8"?>
<documentProperties type="documentProperties">
<producedBy>
<ourName type="string">NAMEHERE</ourName>
......
<.... in practice +3 MB more content in output and source element text here...>
.......
<user>Someone</user>
</producedBy>
</documentProperties>
xsl:value-of
или любая замена. - person Martin Honnen   schedule 22.12.2020parse-xml()
. Например, вот документация по реализации Saxon. - person Eiríkr Útlendi   schedule 22.12.2020