[英]Java jdom xml parsing
這是我使用java的第一天,我嘗試為我的網站構建一個小的xml解析器,所以我可以在我的sitemaps.xml上看一下。 我使用的代碼就是這樣
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.net.URL;
import java.util.List;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
class downloadxml {
public static void main(String[] args) throws IOException {
String str = "http://www.someurl.info/sitemap.xml";
URL url = new URL(str);
InputStream is = url.openStream();
int ptr = 0;
StringBuilder builder = new StringBuilder();
while ((ptr = is.read()) != -1) {
builder.append((char) ptr);
}
String xml = builder.toString();
org.jdom2.input.SAXBuilder saxBuilder = new SAXBuilder();
try {
org.jdom2.Document doc = saxBuilder.build(new StringReader(xml));
System.out.println(xml);
Element xmlfile = doc.getRootElement();
System.out.println("ROOT -->"+xmlfile);
List list = xmlfile.getChildren("url");
System.out.println("LIST -->"+list);
} catch (JDOMException e) {
// handle JDOMExceptio n
} catch (IOException e) {
// handle IOException
}
System.out.println("===========================");
}
}
當代碼通過時
System.out.println(xml);
我得到了xml站點地圖的干凈打印。 到那個時刻:
System.out.println("ROOT -->"+xmlfile);
輸出:
ROOT -->[Element: <urlset [Namespace: http://www.sitemaps.org/schemas/sitemap/0.9]/>]
它還找到了根元素。 但由於某種原因,當腳本應該為孩子們時,它會返回一個空白的打印:
System.out.println("LIST -->"+list);
輸出:
LIST -->[]
我應該以另一種方式做什么? 什么指針來得到孩子?
XML看起來像這樣
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>http://www.image.url</loc>
<image:image>
<image:loc>http://www.image.url/image.jpg</image:loc>
</image:image>
<changefreq>daily</changefreq>
</url>
<url>
</urlset>
你一天都走了很長的路。
簡而言之,您忽略了XML文檔的命名空間。 換行:
List list = xmlfile.getChildren("url");
至
Namespace ns = Namespace.getNamespace("http://www.sitemaps.org/schemas/sitemap/0.9");
List list = xmlfile.getChildren("url", ns);
為方便起見,您可能還希望將整個構建過程簡化為:
org.jdom2.Document doc = saxBuilder.build("http://www.someurl.info/sitemap.xml");
我的注釋類似於上面的注釋,但是使用catch子句,當輸入xml不是“格式良好”時,它會顯示很好的消息。 這里的輸入是一個xml文件。
File file = new File("adr781.xml");
SAXBuilder builder = new SAXBuilder(false);
try {
Document doc = builder.build(file);
Element root = doc.getRootElement();
} catch (JDOMException e) {
say(file.getName() + " is not well-formed.");
say(e.getMessage());
} catch (IOException e) {
say("Could not check " + file.getAbsolutePath());
say(" because " + e.getMessage());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.