2016-12-22 2 views
0

Я хочу, чтобы запустить преобразование XSLT на документ XML, который находится в LATIN2 кодировке XML-док выглядит следующим образом:Невозможно сделать преобразование XSLT на LATIN2 XML документ

<?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

http://xsltransform.net/bFWR5Ep, кажется, выводит три точки для каждого элемента ввода, поэтому проблема заключается в остальной части кода, который вы не показывали, как минимальный, но полный XSLT и, конечно же, Java код, выполняющий преобразование. –

+0

ОК интересно, спасибо! –

+0

Я бы удалил все это «конверсионный» код. Строка Java всегда кодируется в кодировке UTF-16. Преобразуя его в байты и обратно в строку, особенно без кодировки (что и делает «новая строка» (utf8) », скорее всего, приведет к повреждению персонажей и ухудшит ситуацию. – VGR

ответ

2

Наиболее очевидное объяснение состоит в том, что кодирование таблицы стилей XSLT неверно. Не имеет значения, какова фактическая кодировка, если она правильно объявлена. Если фактическая кодировка таблицы стилей iso-8859-2, но объявление XML опущено или говорит utf-8, то эти имена будут неверно истолковываться и не будут соответствовать именам в исходном документе.

Смежные вопросы