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有幾個重要的方法:
     * 一、addComment:添加註釋
     * 二、addAttribute:添加屬性
     * 三、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");
}
相關文章
相關標籤/搜索