XML解析&xE4öü;JAVA
我正在用Java编写一个程序,解析XML。我的问题是,像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
ä
、ö
、ü
这样的特殊符号没有显示在我的应用程序中。但文本的其余部分尚未完成。例如:
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同意,但总的来说,答案是有帮助的-所以我支持投票。