我有一个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”(没有é)。
感谢您的帮助。
答案 0 :(得分:1)
我强烈怀疑要么你正在解析它,或者(更有可能)它只是没有正确地显示。你还没有真正告诉我们关于代码或你如何使用结果的任何信息,这使得很难给出非常具体的建议。
与编码问题一样,要做的第一件事就是确切地确定数据丢失的位置。大量的日志记录往往是前进的方向:创建一个小的测试用例来演示问题(尽可能小到可以逃脱)并记录有关数据的所有内容。不要只是尝试将其记录为原始文本:记录每个字符的Unicode值。这样,即使用于查看日志的字体或编码存在问题,您的日志也会包含所有信息。
答案 1 :(得分:1)
答案 2 :(得分:-1)
你可以使用utf-8并在你的文档中使用'é'字符而不是é
,或者你需要有一个解析器来理解这个实体,它存在于HTML和XHTML以及其他XML方言中但不是纯XML:在纯XML中,只有“"
,<
,>
和'
我不记得了。
也许你需要在你的DTD或XML Schema中指定那些特殊的char实体(我不知道你使用哪一个)并告诉你的解析器。