Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XML解析&xE4öü;JAVA_Java_Xml_Parsing - Fatal编程技术网

XML解析&xE4öü;JAVA

XML解析&xE4öü;JAVA,java,xml,parsing,Java,Xml,Parsing,我正在用Java编写一个程序,解析XML。我的问题是,像ä、ö、ü这样的特殊符号没有显示在我的应用程序中。但文本的其余部分尚未完成。例如: Oliver Krähnbühl => Oliver Krhnbhl 我不能通过XML的编码来做一些事情。因为它是由HTTP请求加载的 以下是解析器的代码: public Boolean parse(String url) { try { InputStream inStream = (InputStream) new UR

我正在用Java编写一个程序,解析XML。我的问题是,像
ä
ö
ü
这样的特殊符号没有显示在我的应用程序中。但文本的其余部分尚未完成。例如:

Oliver Krähnbühl  => Oliver Krhnbhl
我不能通过XML的编码来做一些事情。因为它是由HTTP请求加载的

以下是解析器的代码:

public Boolean parse(String url) {
    try {
        InputStream inStream = (InputStream) new URL(url).getContent();


        // TODO: after we must do a cache of this XML!!!!
        this.factory = DocumentBuilderFactory.newInstance();
        this.builder = this.factory.newDocumentBuilder();
        this.builder.isValidating();
        Document doc = this.builder.parse(inStream, null);

        doc.getDocumentElement().normalize();

        //Get all categories
        NodeList categoryList = doc.getElementsByTagName("Category");

        //Loop each category
        for (int i = 0; i < categoryList.getLength(); i++) {
            //Get categoryname
            final NamedNodeMap attr     = categoryList.item(i).getAttributes();
            final String categoryName   = getNodeValue(attr, "name");

            //Add a category separator
            productSeparator s = new productSeparator(categoryName);
            this.list.add(s);

            //Get current Category as element
            Element category        = (Element)categoryList.item(i);

            //Get all Products from current category
            NodeList productList    = category.getElementsByTagName("Product");

            //Loop each element from each category
            for(int x = 0; x < productList.getLength(); x++)
            {
                //Get current Product as element
                Element product     = (Element)productList.item(x);

                //Set properties to variable

                String productName          = (((Element)product.getElementsByTagName("Name").item(0)).getChildNodes()).item(0).getNodeValue();
                String productDescription   = (((Element)product.getElementsByTagName("Description").item(0)).getChildNodes()).item(0).getNodeValue();
                String productPrice         = (((Element)product.getElementsByTagName("Price").item(0)).getChildNodes()).item(0).getNodeValue();
                String productImageUri      = (((Element)product.getElementsByTagName("ImageUri").item(0)).getChildNodes()).item(0).getNodeValue();

                // Construct Country object
                product p = new product(productName, productDescription, new Float(productPrice), productImageUri);

                // Add to list
                this.list.add(p);
            }
        }
        return true;
    } 
    catch (Exception er) {
        Log.e("Exception", er.toString());
        return false;
    }
}
公共布尔解析(字符串url){
试一试{
InputStream inStream=(InputStream)新URL(URL).getContent();
//TODO:之后,我们必须对该XML进行缓存!!!!
this.factory=DocumentBuilderFactory.newInstance();
this.builder=this.factory.newDocumentBuilder();
this.builder.isValidating();
Document doc=this.builder.parse(inStream,null);
doc.getDocumentElement().normalize();
//获取所有类别
NodeList categoryList=doc.getElementsByTagName(“类别”);
//循环每个类别
对于(int i=0;i
您是否尝试使用输入流读取器

比如:

Reader reader 
   = new InputStreamReader((InputStream) new URL(url).getContent(), "utf-8");
InputSource src = new InputSource(reader);
Document doc = this.builder.parse(src);
并使用or创建XML,类似于:

Reader reader 
   = new InputStreamReader((InputStream) new URL(url).getContent(), "utf-8");
InputSource src = new InputSource(reader);
Document doc = this.builder.parse(src);
还可以查看输出方法,例如,尝试以下方法:

try
{
  // output to the console
  Writer w =
     new BufferedWriter
        (new OutputStreamWriter(System.out, "utf-8"));
  w.write("looks good: äöü\n"); // looks good
  w.flush();

  w = new BufferedWriter
         (new OutputStreamWriter(System.out, "Cp850"));
  w.write("looks bad: äöü"); // looks bad
  w.flush();
  w.close();
}
catch (Exception e)
{
  e.printStackTrace();
}

您是否尝试使用输入流读取器

比如:

Reader reader 
   = new InputStreamReader((InputStream) new URL(url).getContent(), "utf-8");
InputSource src = new InputSource(reader);
Document doc = this.builder.parse(src);
并使用or创建XML,类似于:

Reader reader 
   = new InputStreamReader((InputStream) new URL(url).getContent(), "utf-8");
InputSource src = new InputSource(reader);
Document doc = this.builder.parse(src);
还可以查看输出方法,例如,尝试以下方法:

try
{
  // output to the console
  Writer w =
     new BufferedWriter
        (new OutputStreamWriter(System.out, "utf-8"));
  w.write("looks good: äöü\n"); // looks good
  w.flush();

  w = new BufferedWriter
         (new OutputStreamWriter(System.out, "Cp850"));
  w.write("looks bad: äöü"); // looks bad
  w.flush();
  w.close();
}
catch (Exception e)
{
  e.printStackTrace();
}

如果看不到XML(及其编码)、解析它的代码和显示它的代码,就很难回答。这很奇怪。它在我的应用程序中工作。也许您应该发布解析XML文档并显示它的代码。您可以向我们展示从HTTP响应设置解析的代码吗?另外,您能否确认字符串是否确实缺少字符?也许这只是一个显示问题。您如何解析xml?如何“通过HTTP请求加载”代码?只有掌握了所有这些细节,我们才能说出为什么
ä
变成
a
。我们也能看到显示代码吗?我的直觉是,由于特殊字符正在消失,错误就会出现。如果看不到XML(及其编码)、解析它的代码以及显示它的代码,就很难回答。这很奇怪。它在我的应用程序中工作。也许您应该发布解析XML文档并显示它的代码。您可以向我们展示从HTTP响应设置解析的代码吗?另外,您能否确认字符串是否确实缺少字符?也许这只是一个显示问题。您如何解析xml?如何“通过HTTP请求加载”代码?只有掌握了所有这些细节,我们才能说出为什么
ä
变成
a
。我们也能看到显示代码吗?我的直觉是,由于特殊字符正在消失,错误就会出现。服务器应该发送一个指定编码的内容类型头,或者解析器应该通过查看前几个字符和xml序言来确定它。在这种情况下,硬编码utf-8是完全错误的。@Jorn同意,但总的来说,答案是有帮助的-因此我支持投票。服务器应该发送一个指定编码的内容类型头,或者解析器应该通过查看前几个字符和xml序言来确定它。在这种情况下,硬编码utf-8是完全错误的。@Jorn同意,但总的来说,答案是有帮助的-所以我支持投票。