xmlns и xslt-преобразование в Java - PullRequest
1 голос
/ 17 июня 2011

Я преобразую xml-файл A из xmlns = "ans" через xslt 2.0 saxon в java с помощью javax.xml.Transformer в xml-файл B из xmlns = "bns".

Когда преобразование выполнено, выходной xml показывает только значения XML-файла A и возникает ошибка:

[Fatal Error] :3:4: Content is not allowed in prolog.

Когда я удаляю xmlns = "ans" файла A, результирующий xml-файл b является правильным, и при преобразовании ошибок не возникает. Для моего случая использования xml-сообщения, которые будут преобразованы, будут содержать пространство имен. Любые идеи, как решить это, не удаляя объявление пространства имен входного файла?

Приложение:

Мой код Java:

System.setProperty("javax.xml.transform.TransformerFactory",  
"net.sf.saxon.TransformerFactoryImpl");  

TransformerFactory transFactory = TransformerFactory.newInstance();
StreamSource stylesource = new StreamSource("transformation.xsl");
Templates template = transFactory.newTemplates(stylesource);
Transformer transformer = template.newTransformer();
StreamSource source = new StreamSource(new File("filea.xml"));

StreamResult result = new StreamResult(new StringWriter());
transformer.transform(source, result);
//result will be written to fileb.xml

Мой файлa.xml

<?xml version="1.0" encoding="UTF-8"?>
<message xmlns="ans">...
</message>

Моя трансформация.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns="bns">
<xsl:output method="xml" indent="yes" />
...
</xsl>

1 Ответ

2 голосов
/ 17 июня 2011

Ну, если вы не покажете нам элементы обработки кода таблицы стилей, мы можем только догадываться.Я подозреваю, что установка атрибута xpath-default-namespace="ans" на элемент xsl:stylesheet может решить проблему.Если нет, пожалуйста, опубликуйте достаточно подробностей вашего кода, чтобы мы могли воспроизвести проблему.

...