Разделить xml-файл с результирующим документом и javax.xml.transform.Transformer - PullRequest
4 голосов
/ 11 января 2010

У меня есть XSLT, который разделит большой xml-файл на несколько xml-файлов с использованием следующего xslt-кода.

<xsl:variable name="filename" select="resolve-uri(concat('splitfilesfolder/',position(),'.xml'))" /> 
 <xsl:result-document href="{$filename}" format="xml">
    <--XML file content --->
 </xsl:result-document>

Затем я использовал этот XSLT в своем коде для разделения входного XML-файла, используя javax.xml.transform.Transformer.

TransformerFactory tFactory = TransformerFactory.newInstance();
Source xslSource =  new StreamSource(xsltfilepath);

Transformer trans = tFactory.newTransformer(xslSource);
trans.transform(new StreamSource(xmlFileName), new StreamResult(splitfilesfolder));

Здесь я хочу дать тот же путь для нового Streamresult, как и в пути к документу результата. Как я могу преобразовать несколько XML-файлов, используя результат doucment и javax.xml.transform.Transform ??

Кто-нибудь может дать мне решение?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 11 января 2010

<xsl:result-document> в XSLT 2.0 javax.xml.transform не поддерживает XSLT 2.0, поэтому у меня сложилось впечатление, что вам не повезло с использованием встроенных преобразователей.

Попробуйте использовать Saxon . Просто добавьте jar-файл в ваш classpath и все готово.

В вашем XSLT также есть ошибка

 <xsl:result-document href="{$filename}" format="xml">

Должно быть

 <xsl:result-document href="{$filename}" method="xml">

Чтобы получить каталог в XSLT, я бы использовал

Java

trans.setParameter("dir", "dirname");

1019 * XSL *

<xsl:param name="dir"/>
0 голосов
/ 01 октября 2011

Создайте экземпляр Saxon TransformerFactory напрямую, т.е. TransformerFactoryImpl factory = new TransformerFactoryImpl ();Не используйте мертвый JAXP TransformerFactory.newInstance ();... поскольку вы явно получаете что-то иное, чем саксонский подтекст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...