Я пытаюсь преобразовать некоторый XML, чтобы вместо символов появлялись строки сущности iso8879. Например, строка 1234-5678
станет 1234‐5678
. Я сделал это, используя карты персонажей и таблицы стилей, найденные в http://www.w3.org/2003/entities/iso8879doc/overview.html.
Первая часть моего xslt выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="iso8879map.xsl"/>
<xsl:output omit-xml-declaration = "yes" use-character-maps="iso8879"/>
Когда я запускаю эту таблицу стилей в Eclipse с движком Saxon XSLT, она работает нормально и выводит XML-файл со строкой разрешения дефиса вместо символа дефиса. Однако мне нужно автоматизировать этот процесс, поэтому я использую пакет JDOM. К сожалению, персонажи не заменяются во время трансформации. Код, который выполняет преобразование, выглядит примерно так:
System.setProperty("javax.xml.transform.TransformerFactory",
"net.sf.saxon.TransformerFactoryImpl"); // use saxon for xslt 2.0 support
SAXBuilder builder = new SAXBuilder();
builder.setExpandEntities(false);
XSLTransformer transformer = new XSLTransformer(styleSheet);
Document toTransform = builder.build(Fileref); // transform
Document transformed = transformer.transform(toTransform);
Затем я записываю документ в файл, используя следующий метод:
public static void writeXMLDoc(File xmlDoc, Document jdomDoc){
try {
Format format = Format.getPrettyFormat();
format.setOmitDeclaration(true);
format.setEncoding("ISO-8859-1");
XMLOutputter outputter = new XMLOutputter(format);
//outputter.output((org.jdom.Document) allChapters, System.out);
FileWriter writer = new FileWriter(xmlDoc.getAbsolutePath());
outputter.output((org.jdom.Document) jdomDoc, writer);
writer.close();
}
catch (java.io.IOException exp) {
exp.printStackTrace();
}
}
Я начал отладку в Eclipse, и похоже, что символ дефиса не заменяется во время преобразования xslt. Я протестировал это с помощью механизма Saxon xslt сам по себе, и он работает, так что, скорее всего, это связано с использованием Java и Jdom. Кто-нибудь может помочь?
Большое спасибо.
Jim