0

我想解析以下 xml 结构:

<?xml version="1.0" encoding="utf-8"?>
<documents>
  <document>
    <element name="title">
      <value><![CDATA[Personnel changes: Müller]]></value>
    </element>
  </document>
</documents>

为了解析这个element name="?????结构,我按以下方式使用 XPath:

XPath xPath = XPathFactory.newInstance().newXPath();

String currentString = (String) xPath.evaluate("/documents/document/element[@name='title']/value",pCurrentXMLAsDOM, XPathConstants.STRING);

解析本身工作正常,但德语变音符号(元音)如“Ü”、“ß”或类似的东西存在一些问题。当我打印出 currentString 时,字符串是:

Personnel changes: Müller

但我想拥有像 XML 中的字符串:

Personnel changes: Müller

只是补充一下:我无法更改xml文件的内容,我必须像我得到它一样解析它,所以我必须以正确的方式解析everey String。

4

3 回答 3

2

听起来像是编码问题。XML 是 UTF-8 编码的 Unicode,您似乎将其打印为 ISO-8859-1。检查 Java 源代码的编码设置。

编辑:请参阅设置默认 Java 字符编码?对于如何设置file.encoding

于 2012-08-08T09:36:20.290 回答
1

我现在找到了一个好的快速的解决方案:

public static String convertXMLToString(File pCurrentXML) {

        InputStream is = null;
        try {
            is = new FileInputStream(pCurrentXML);
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }
        String contents = null;
         try {

                try {
                    contents = IOUtils.toString(is, "UTF-8");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } finally {
                IOUtils.closeQuietly(is);
            }

        return contents;

    }

Afterwars 我将 String 转换为 DOM 对象:

static Document convertStringToXMLDocumentObject(String string) {

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null;
        Document document = null;

        try {
            builder = factory.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }

        try {
            document = builder.parse(new InputSource(new StringReader(string)));
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return document;

    }

然后我可以使用 XPath 解析 DOM,所有元素值都在 UTF-8 中!示范:

currentString = (String) xPath.evaluate("/documents/document/element[@name='title']/value",pCurrentXMLAsDOM, XPathConstants.STRING);
System.out.println(currentString);

输出:

Personnel changes: Müller

:)

于 2012-08-09T07:03:20.477 回答
0

如果您知道文件是 utf8 编码的,请尝试以下操作:

    FileInputStream fis = new FileInputStream("yourfile.xml");
    InputStreamReader in = new InputStreamReader(fis, "UTF-8");

    InputSource pCurrentXMLAsDOM = new InputSource(in);
于 2012-08-08T11:00:01.877 回答