0

我有一个像这样的具有法语字符的 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╟”必须后跟“=”字符。

如何在我的节点列表中阅读我的法语单词?谢谢

4

2 回答 2

1

您的文档似乎没有使用它在其标题中声明的字符集。如果 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 文档的声明和实际编码匹配。

于 2013-11-26T18:02:14.267 回答
0

有人发现了我的问题。这是因为我的 XML 是使用使用 UTF-8 进行编码的记事本保存的。我使用 NotePad++ 并将其保存为 ISO-8859-1,我的代码现在可以正常工作了。

于 2013-11-27T20:10:38.223 回答