解析XML时,缺少字符é

时间:2010-06-28 14:57:16

标签: character-encoding character

我有一个XML作为Java函数的输入,它解析它并生成输出。在XML的某个地方有“stratégie”这个词。输出是“stratgie”。我应该如何解析XML以获得“é”字符?

XML不是由我自己制作的,我把它作为来自网络服务的回复而且我很肯定“stratégie”被包含在其中作为“stratégie”。 在解析器中,我有:

public List<Item> GetItems(InputStream stream) {

    try {

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(stream);
        doc.getDocumentElement().normalize();
        NodeList nodeLst = doc.getElementsByTagName("item");
        List<Item> items = new ArrayList<Item>();

        Item currentItem = new Item();
        Node node = nodeLst.item(0);
        if (node.getNodeType() == Node.ELEMENT_NODE) {
            Element item = (Element) node;
            if(node.getChildNodes().getLength()==0){
                return null;
            }


NodeList title = item.getElementsByTagName("title");
Element titleElmnt = (Element) title.item(0);
if (null != titleElmnt)
    currentItem.setTitle(titleElmnt.getChildNodes().item(0).getNodeValue());
....

使用调试器,我可以看到titleElmnt.getChildNodes()。item(0).getNodeValue()是“stratgie”(没有é)。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

我强烈怀疑要么你正在解析它,或者(更有可能)它只是没有正确地显示。你还没有真正告诉我们关于代码或你如何使用结果的任何信息,这使得很难给出非常具体的建议。

与编码问题一样,要做的第一件事就是确切地确定数据丢失的位置。大量的日志记录往往是前进的方向:创建一个小的测试用例来演示问题(尽可能小到可以逃脱)并记录有关数据的所有内容。不要只是尝试将其记录为原始文本:记录每个字符的Unicode值。这样,即使用于查看日志的字体或编码存在问题,您的日志也会包含所有信息。

答案 1 :(得分:1)

答案 2 :(得分:-1)

你可以使用utf-8并在你的文档中使用'é'字符而不是&#233;,或者你需要有一个解析器来理解这个实体,它存在于HTML和XHTML以及其他XML方言中但不是纯XML:在纯XML中,只有“&quot;&lt;&gt;&apos;我不记得了。

也许你需要在你的DTD或XML Schema中指定那些特殊的char实体(我不知道你使用哪一个)并告诉你的解析器。