zoukankan      html  css  js  c++  java
  • 【Java–XML】JDOM解析XML字符串(非XML文档)

    package cmo.shubai.jdom;

    import java.io.IOException;
    import java.io.StringReader;
    import java.util.List;

    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.Namespace;
    import org.jdom.input.SAXBuilder;
    import org.xml.sax.InputSource;

    public class DuXMLDoc {
    public List xmlElements(String xmlDoc) {
    //创建一个新的字符串
    StringReader read = new StringReader(xmlDoc);
    //创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
    InputSource source = new InputSource(read);
    //创建一个新的SAXBuilder
    SAXBuilder sb = new SAXBuilder();
    try {
    //通过输入源构造一个Document
    Document doc = sb.build(source);
    //取的根元素
    Element root = doc.getRootElement();
    System.out.println(root.getName());//输出根元素的名称(测试)
    //得到根元素所有子元素的集合
    List jiedian = root.getChildren();
    //获得XML中的命名空间(XML中未定义可不写)
    Namespace ns = root.getNamespace();
    Element et = null;
    for(int i=0;i et = (Element) jiedian.get(i);//循环依次得到子元素
    /**//*
    * 无命名空间定义时
    * et.getChild("users_id").getText();
    * et.getChild("users_address",ns).getText()
    */
    System.out.println(et.getChild("users_id",ns).getText());
    System.out.println(et.getChild("users_address",ns).getText());
    }
    /**//*
    * 如要取下的子元素的名称
    */
    et = (Element) jiedian.get(0);
    List zjiedian = et.getChildren();
    for(int j=0;j Element xet = (Element) zjiedian.get(j);
    System.out.println(xet.getName());
    }
    } catch (JDOMException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    } catch (IOException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
    return null;
    }
    public static void main(String[] args){
    DuXMLDoc doc = new DuXMLDoc();
    String xml = "“+
    ““+
    ““+
    “1001 “+
    “wangwei “+
    “80 “+
    “1001号 “+
    ““+
    ““+
    “1002 “+
    “wangwei “+
    “80 “+
    “1002号 “+
    ““+
    ““;
    doc.xmlElements(xml);
    }
    }

    以上的例子和实际稍有出入-这个例子主要是用来演示JDOM解析XML字符串


    JDOM处理带Namespace的XML文件

    最近在开发中遇到读取XML文件出现的一些问题-JDOM技术读取
    1
    2
    3
    4 1001
    5 wangwei
    6 80
    7 1001号
    8
    9
    10 1002
    11 wangwei
    12 80
    13 1002号
    14
    15
    16 1003
    17 wangwei
    18 80
    19 1003号
    20
    21
    22 1004
    23 wangwei
    24 80
    25 1004号
    26
    27

    代码当中 xmlns=”http://www.fiorano.com/fesb/activity/DBQueryOnInput2/Out”>
    是这个XML文件的命名空间(Namespace)读取该文档的元素值时必须指定其命名空间不然会产生java.lang.NullPointerException 空指针异常
    实际执行代码

    public class DuXMLTest2 {
    public void loadXMLdoc(){
    FileInputStream fi = null;
    try {
    fi = new FileInputStream("Test.xml");
    SAXBuilder sb = new SAXBuilder();
    try {
    Document doc = sb.build(fi);
    Element root = doc.getRootElement();
    Namespace ns = root.getNamespace();
    List jiedian = root.getChildren();
    Element et = null;
    for(int i=0;i et = (Element) jiedian.get(i);
    System.out.println(et.getChild("users_id",ns).getText());
    }
    } catch (JDOMException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    } catch (IOException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
    } catch (FileNotFoundException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
    }
    public static void main(String[] args){
    DuXMLTest2 dt = new DuXMLTest2();
    dt.loadXMLdoc();
    }

  • 相关阅读:
    [求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
    [经验] Win7减肥攻略(删文件不删功能、简化优化系统不简优化性能)
    [原创] Easy SysLite V1.2 (2016.5.29更新,新增加WIN10支持,一个程序适配所有系统减肥)
    [经验] 新版SkyIAR、Easy Image X在有些PE里不能运行的解决办法
    [教程] [承風雅傳HSU]用ES4封裝Win7---ES4 Win7封裝教程(未完待續)
    [讨论] 这几天来封装Win7用户配置文件丢失的解决方法个人心得
    [原创] 【2014.12.02更新网盘链接】基于EasySysprep4.1的 Windows 7 x86/x64 『视频』封装
    [分享] 封装工具ES4配置文件解释
    [分享] 史上最简单的封装教程,五分钟学会封装系统(以封装Windows 7为例)
    [分享] 从定制Win7母盘到封装详细教程 By BILL ( 10月23日补充说明 )
  • 原文地址:https://www.cnblogs.com/jifeng/p/1707585.html
Copyright © 2011-2022 走看看