iso8879 エンティティ文字列が文字の代わりに表示されるように、一部の XML を変換しようとしています。たとえば、文字列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"/>
Saxon XSLT エンジンを使用して Eclipse でこのスタイルシートを実行すると、正常に動作し、ハイフン文字の代わりにハイフン entitiy 文字列を含む 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 から使用することと関係がある可能性があります。誰でも助けることができますか?
どうもありがとう。
ジム