Java 无法在我的 XML 中获取带有法语口音的 Nodelist

标签 java special-characters nodelist

我有一个类似这样的具有法语字符的 XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<liste>
<produit code="311" prix="43.00" quantité= "28" />
<produit code="123" prix="39.00" quantité= "10"  />
<produit code="456" prix="36.00" quantité= "241"  />
</liste>

我的java代码:

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

public class test2 {
public static void main(String[] args) throws Exception {
System.setOut(new PrintStream(System.out, true, "Cp850")); 
   DocumentBuilderFactory factory = 
    DocumentBuilderFactory.newInstance();
   DocumentBuilder parser = factory.newDocumentBuilder();
   Document doc = parser.parse(args[0]);

   Element racine = doc.getDocumentElement(); 
   NodeList nl = racine.getElementsByTagName("produit");
}
}

当我尝试使用 javac 编译 java 代码时,出现错误告诉我: 与元素类型“produit”关联的属性名称“Quantit╟”必须后跟“=”字符。

如何在节点列表中读取法语单词? 谢谢

最佳答案

您的文档似乎没有使用它在标题中声明的字符集。 如果 XML 文档编码为 UTF-8,我可以重现您的问题。如果编码为 ISO-8859-1,问题就会消失。请自己尝试一下:

public static void main(String[] args) throws Exception {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    //OutputStreamWriter osw = new OutputStreamWriter(baos, "UTF-8"); // causes described error
    OutputStreamWriter osw = new OutputStreamWriter(baos, "ISO-8859-1");
    PrintWriter pw = new PrintWriter(osw, true);
    pw.println("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>"); 
    pw.println("<liste>"); 
    pw.println("<produit code='311' prix='43.00' quantité= '28' />"); 
    pw.println("<produit code='123' prix='39.00' quantité= '10'  />"); 
    pw.println("<produit code='456' prix='36.00' quantité= '241'  />"); 
    pw.println("</liste>");
    pw.close();

    System.setOut(new PrintStream(System.out, true, "Cp850"));
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder parser = factory.newDocumentBuilder();
    Document doc = parser.parse(new ByteArrayInputStream(baos.toByteArray()));

    Element racine = doc.getDocumentElement();
    NodeList nl = racine.getElementsByTagName("produit");
}

您应该使 XML 文档的声明编码与实际编码相匹配。

关于Java 无法在我的 XML 中获取带有法语口音的 Nodelist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20221806/

相关文章:

java - 展开所有实例的抽象 Java 类

java - 从 EJB 读取文件

javascript - React ANTD DatePicker HTMLCollection 在提取元素/值时不显示实时值

xml - XML 中的方括号?

javascript - 如何区分事件和非事件的 NodeList 集合?

javascript - for...in 循环不遍历所有属性?

java - 您可以在 if 子句中存储变量吗?

java - 如何从设备中获取单独的联系人姓名数组列表和联系人号码数组列表

php - 用其发音相似的字符替换特殊字符(在 php - utf8 中)

c# - Lucene 和正斜杠