我試圖轉換一些XML,以便iso8879實體字符串將出現在字符位置。例如,字符串1234-5678
將變成1234‐5678
。我已經使用字符映射和http://www.w3.org/2003/entities/iso8879doc/overview.html中的樣式表完成了這個工作。使用Saxon和XSLT轉換JDOM XML文檔
我的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與撒克遜XSLT引擎正常工作和到位的輸出與連字符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使用它有關。任何人都可以幫忙嗎?
非常感謝。
吉姆
字符映射未完成的變換,它的輸出序列的一部分,所以你可能看不到他們在變換中改變。序列化輸出的是JDOM,而不是撒克遜。 – 2011-04-01 19:19:54
「我需要自動化這個過程,所以我使用JDOM包」......後者不是由前者規定的結論。撒克遜工作,所以爲什麼不使用撒克遜自動化過程? – 2011-04-01 20:53:43
事實上,如果您有充分的理由使用JDOM,您可以將其與Saxon一起使用。當您使用其XSLTransformer API時,JDOM使用XSLT 1.0 Xalan處理器,但Saxon也將接受JDOM文檔作爲輸入,允許您使用XSLT 2.0字符映射。 – 2011-04-02 22:14:30