我想在xml文档上运行XSLT转换,该文档采用latin-2编码 xml doc看起来像这样:
<?xml version="1.0" encoding="ISO-8859-2"?>
<Cégjegyzék>
<Kiadmány>
<CégAdatlap>...</CégAdatlap>
<CégAdatlap>...</CégAdatlap>
<CégAdatlap>...</CégAdatlap>
</Kiadmány>
</Cégjegyzék>
我的XSLT尝试遍历这些元素。
<results>
<xsl:for-each select="//Cégjegyzék/Kiadmány/CégAdatlap" >
...
</xsl:for-each>
</results>
但是输出总是如下所示
<?xml version="1.0" encoding="UTF-8"?><results/>
我认为XPath由于编码问题而无法正常工作,这就是为什么我试图像这样转换为utf8
byte[] latin2 = xml.getBytes("ISO-8859-2");
byte[] utf8 = new String(latin2, "ISO-8859-2").getBytes("UTF-8");
String utf8String = new String(utf8);
utf8String = utf8String.replace("ISO-8859-2","UTF-8");
return utf8String;
不幸的是,这没有任何帮助。
任何人都知道问题是什么以及如何解决它?
启动转换的代码:
TransformerFactory tf = TransformerFactory.newInstance();
File f = new File(searchProviderXslt.getXsltFilename());
StreamSource ss = new StreamSource(f);
Transformer transformer = tf.newTransformer(ss);
//String response = convert_response((String) resp, sc);
String response = (String) resp;
Source xml = new StreamSource((new StringReader(response)));
StreamResult xmlres = new StreamResult(new StringWriter());
transformer.transform(xml, xmlres);
String xmls = xmlres.getWriter().toString();
答案 0 :(得分:2)
最明显的解释是XSLT样式表的编码不正确。只要正确声明,实际编码是什么并不重要。如果样式表的实际编码是iso-8859-2,但是省略了XML声明或者说utf-8,那么这些名称将被误解,并且不会与源文档中的名称匹配。