Java的JDOM的XML解析(Java jdom xml parsing)

2019-10-18 04:44发布

这是我的第一天,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>

Answer 1:

你来得一天很长的路要走。

简短的回答,你忽略了你的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");


Answer 2:

我的评论是类似于上述情况,但与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());
    }


文章来源: Java jdom xml parsing