这次学习记录偏向于读取 和解决问题 不在于囊括所有内容

练习数据

data.xml

读取整个xml获取可操作对象

  1. public static Document load(String filename) {
  2. Document document = null;
  3. try {
  4. SAXReader saxReader = new SAXReader();
  5. document = saxReader.read(new File(filename)); // 读取XML文件,获得document对象
  6. } catch (Exception ex) {
  7. ex.printStackTrace();
  8. }
  9. return document;
  10. }
  11. // 基本上是同一种方式 只是方法重载
  12. public static Document load(URL url) {
  13. Document document = null;
  14. try {
  15. SAXReader saxReader = new SAXReader();
  16. document = saxReader.read(url); // 读取XML文件,获得document对象
  17. } catch (Exception ex) {
  18. ex.printStackTrace();
  19. }
  20. return document;
  21. }

读取节点名称和文本

这里以获取title节点得名字和文本

  1. // 获取根节点
  2. Element rootElement = document.getRootElement();
  3. // elementIterator()
  4. // 返回此元素中包含的元素的迭代器
  5. for (Iterator<Element> it = rootElement.elementIterator(); it.hasNext();) {
  6. // next() 一个迭代器的每一个元素 就是下一个 下一个的意思
  7. // .element("") 参数 标签名称 获得传入标签的element对象
  8. Element element = it.next().element("title");
  9. // 打印输出 元素名称和 元素文本值
  10. System.out.println("这一个元素: " + element.getName() + ", 元素的值是: "+ element.getText());
  11. }

通过这个代码获得了:

  1. 获取根节点(操作基本上都是基于根节点);
  2. 获取Element下面的Element可迭代对象
  3. 获取Element下面的Element对象 并且获取Element对象的 标签值 和 文本内容

    标签属性操作 ( 以下代码都是接着上面代码书写的)

    1. // 获取 Element对象属性对象 Attribute
    2. Attribute attribute=element.attribute("name");
    3. // 需要判断是否为空
    4. if(attribute != null){
    5. // 获取属性名称和 属性文本值
    6. String text = attribute.getText();
    7. String name = attribute.getName();
    8. System.out.println(name +": "+text);
    9. }
    10. System.out.println("------------------------------");
    11. // 一次性遍历所有属性
    12. Iterator attributeIterator = element.attributeIterator();
    13. while (attributeIterator.hasNext()){
    14. Attribute attribute1 = (Attribute) attributeIterator.next();
    15. System.out.println(attribute1.getName()+ ": "+ attribute1.getText());
    16. }
    17. // 给某一个元素设置 build 文本为very
    18. Element addAttribute = element.addAttribute("build", "very");
    19. // xml转换为字符串输出
    20. String asXML = addAttribute.asXML();
    21. System.out.println(asXML);
    22. // 输出展示
    23. /**
    24. * 这一个元素: title, 元素的值是: 黑马52期就业快报
    25. * name: title123
    26. * ------------------------------
    27. * name: title123
    28. * home: zfHome
    29. * new: biebiu
    30. * <title build="very">程序员因写代码太乱被杀害</title>
    31. */

    通过这个代码获得了:

  4. 获取标签的属性对象(Attribute) (获取某一个或者迭代遍历)

  5. 获取属性的属性名和文本值
  6. 并且加了一个判断做了一个异常处理
  7. xml转为字符串输出

    将修改好的xml写入新的文件夹

    ```java //设置编码 如果全部是英文则不需要设置 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding(“gbk”);

// 参数(path, outputformat) 也可以(path) XMLWriter writer = new XMLWriter(new FileWriter(“data/xml/output.xml”), format); writer.write(document); writer.close();

  1. <a name="W7koF"></a>
  2. ## 通过这个代码获得了:
  3. 1. 写入文件
  4. 1. 设置编码
  5. <a name="qt03o"></a>
  6. # 修改节点属性 删除节点元素
  7. ```java
  8. // 目前我只处理了修改value值 就是文本值
  9. Attribute attribute=element.attribute("name");
  10. attribute.setValue("ddd");
  11. // 修改节点内容
  12. Element element = it.next().element("title");
  13. element.setText("xxx");// 设置相应的内容
  14. // 删除节点
  15. element.remove(titleElement);
  16. // 记住 getxx 为取值 setxx 为设置值

通过代码获得

  1. 修改value值
  2. 修改节点Text
  3. 删除节点

    Element常用方法 无代码演示

    Element类

    | 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树的根节点 |

Demo4j 接口

Attribute 定义了 XML 的属性。
Branch 指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为
CDATA 定义了 XML CDATA 区域
CharacterData 是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text.
Comment 定义了 XML 注释的行为
Document 定义了XML 文档
DocumentType 定义 XML DOCTYPE 声明
Element 定义XML 元素
ElementHandler 定义了Element 对象的处理器
ElementPath 被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
Entity 定义 XML entity
Node 为dom4j中所有的XML节点定义了多态行为
NodeFilter 定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate)
ProcessingInstruction 定义 XML 处理指令
Text 定义 XML 文本节点
Visitor 用于实现 Visitor模式
XPath 在分析一个字符串后会提供一个 XPath 表达式