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╟」の後には「=」文字が必要です。

nodelist でフランス語の単語を読むにはどうすればよいですか? ありがとう

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 に答える