SAXReader操作xml

/**
 * 该类主要实现xml的基本操作
 *
 * @param FilePath 写入xml文件的路径
 *                 2019年8月27日 15:37:08
 */
public static void testXml(String FilePath) throws IOException {
    Document domcment = DocumentHelper.createDocument(); //通过这句定义一个xml文档对象
    Element root = domcment.addElement("node"); //通过这局定义一个xml元素,这里添加的是根节点,一个文档只能存在一个根节点,否则会报错
    /*
     * Element有几个重要的方法:
     * 1、addComment:添加注释
     * 2、addAttribute:添加属性
     * 3、addElement:添加子元素
     * */
    root.addComment("这是一个人员信息的xml");
    //root.addAttribute("name","zhangsan");
    Element first = root.addElement("skills");//根节点下添加节点
    first.addAttribute("name", "三分归元气");//给子节点添加name属性
    Element info = first.addElement("info"); //节点下添加节点
    info.setText("风云雄霸天下");// 节点设置内容数据

    Element first1 = root.addElement("skill");
    first1.addAttribute("names", "风神腿");
    Element info1 = first1.addElement("info");
    info1.setText("风神腿,独步武林");
    info1.addComment("拥有该腿,独步武林");
    /*
     * 最后通过XMLWriter生成物理文件,默认生成的XML文件排版格式比较乱,可以通过OutputFormat类格式化输出,
     * 默认采用createCompactFormat()显示比较紧凑,最好使用createPrettyPrint()。
     * */
    OutputFormat format = OutputFormat.createPrettyPrint();//创建格式化类
    format.setEncoding("UTF-8"); //设置编码格式,默认为UTF-8
    FileOutputStream fos = new FileOutputStream(FilePath);//创建输出流,此处要使用Writer,需要指定输入编码格式,使用OutputStream则不用
    XMLWriter writer = new XMLWriter(fos, format); //创建xml输出流
    writer.write(domcment);
    writer.close();
    System.out.println("输出流已经关闭");
}

/**
 * 使用dom4j解析xml文件SAXReader
 *****Element元素API*****
 *    getQName() 元素的QName对象
 *   getNamespace() 元素所属的Namespace对象
 *   getNamespacePrefix() 元素所属的Namespace对象的prefix
 *   getNamespaceURI() 元素所属的Namespace对象的URI
 *   getName() 元素的local name
 *   getQualifiedName() 元素的qualified name
 *   getText() 元素所含有的text内容,如果内容为空则返回一个空字符串而不是null
 *   getTextTrim() 元素所含有的text内容,其中连续的空格被转化为单个空格,该方法不会返回null
 *   attributeIterator() 元素属性的iterator,其中每个元素都是Attribute对象
 *   attributeValue() 元素的某个指定属性所含的值
 *   elementIterator() 元素的子元素的iterator,其中每个元素都是Element对象
 *   element() 元素的某个指定(qualified name或者local name)的子元素
 *   elementText() 元素的某个指定(qualified name或者local name)的子元素中的text信息
 *   getParent 元素的父元素
 *   getPath() 元素的XPath表达式,其中父元素的qualified name和子元素的qualified name之间使用"/"分隔
 *   isTextOnly() 是否该元素只含有text或是空元素
 *   isRootElement() 是否该元素是XML树的根节点
 *
 * *****Attribute属性API*****
 *    getQName() 属性的QName对象
 *   getNamespace() 属性所属的Namespace对象
 *   getNamespacePrefix() 属性所属的Namespace对象的prefix
 *   getNamespaceURI() 属性所属的Namespace对象的URI
 *   getName() 属性的local name
 *   getQualifiedName() 属性的qualified name
 *   getValue() 属性的值
 * @param xmlFile 要解析xml的文件
 *                2019-08-27 15:42:45
 */
public static void parseXml(String xmlFile) throws DocumentException {
    SAXReader saxReader = new SAXReader(); //使用SAXReader解析xml
    Document document = saxReader.read(new File(xmlFile));//获取document对象
    Element root = document.getRootElement(); //访问根节点
    //访问所有叶子节点
    List skills = root.elements();
    for (Iterator<?> it = skills.iterator(); it.hasNext(); ) {
        Element e = (Element) it.next();
        System.out.println(e);
    }
    //访问指定名称的节点,如访问名称为“skill”的全部节点
    List skill = root.elements("skill");
    for (Iterator<?> it = skill.iterator(); it.hasNext(); ) {
        Element e = (Element) it.next();
        System.out.println(e);
    }

    //访问指定名称的第一个节点
    Element skillsNode = root.element("skills");
    System.out.println(skillsNode);
    //获取指定员元素下的属性
    Attribute attribute = skillsNode.attribute("name");
    System.out.println(attribute);
    //按照属性顺序获取属性
    Attribute attribute1 = skillsNode.attribute(0);
    System.out.println(attribute1);
    //用xpath表达式获取节点和属性
    List list =  document.selectNodes("//skills/@name");
    for (Iterator it = list.iterator();it.hasNext();){
        Attribute attribute2 = (Attribute) it.next();
        System.out.println(attribute2);
    }
    //删除某个节点
    root.remove(skillsNode);
    System.out.println("节点删除成功");
    //删除指定名称的属性
    root.remove(skillsNode.attribute("name"));
    System.out.println("删除指定名称的属性");
    //修改节点名称和节点值
    skillsNode.setName("new_skill");
    skillsNode.setText("你好啊,赛利亚");



}

public static void main(String[] args) throws IOException, DocumentException {
    //testXml("d:/skills.xml");
    parseXml("d:/skills.xml");
}

转载于:https://my.oschina.net/u/3222944/blog/3098329

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值