无法在latin2 xml文档上进行XSLT转换

时间:2016-12-22 13:04:38

标签: java xml xslt xpath

我想在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();

1 个答案:

答案 0 :(得分:2)

最明显的解释是XSLT样式表的编码不正确。只要正确声明,实际编码是什么并不重要。如果样式表的实际编码是iso-8859-2,但是省略了XML声明或者说utf-8,那么这些名称将被误解,并且不会与源文档中的名称匹配。