日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

AXIOM 读写 xml文件

發(fā)布時(shí)間:2023/12/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AXIOM 读写 xml文件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 什么是AXIOM?

Axiom? ,也就是Axis Object Model
Axis2用Axiom處理soap文檔和soap信息。

  • Axiom的一些特性:
  • Lightweight(輕量),更少的內(nèi)存需要。
  • Deferred building(延遲構(gòu)建)
  • Pull based(pull模式),OM基于StAX--標(biāo)準(zhǔn)的pull parser API
  • ?

    • pull模式

    Axiom采用pull解析方式,基于StAX(JSR173)。
    SAX和DOM 都是基于push的解析方式,也就是說解析控制在parser本身。
    Axiom和StAX緊密相關(guān),要使用Axiom,StAX相關(guān)的jar包也必須在classpath下

    • Axiom讀XML:

    1.需要的包

    axiom-api-1.2.8.jar包含javax.xml.*的 包
    JDK中就有javax.xml.*的包,但一定不要使用他們,所以一定要把AXIS2下的此包加入buildPath,如果不加入,系統(tǒng)也不報(bào)錯(cuò),因?yàn)闀?huì)從JDK中找到,但這樣使用JDK的包就會(huì)在運(yùn)行的時(shí)候出異常

    2.范例test1.xml 文件(用于下面的讀寫)

    <?xml version="1.0" encoding="UTF-8"?>
    <fool>
    ??? <student>
    ??? ??? <name>mac</name>
    ??? ??? <id>12</id>
    ??? ??? <age>33</age>
    ??? ??? <sex>male</sex>
    ??? </student>
    ??? <student>
    ??? ??? <name>silly</name>
    ??? ??? <id>5</id>
    ??? ??? <age>12</age>
    ??? ??? <sex>female</sex>
    ??? </student>
    ??? <teacher>
    ??? ??? <name>Mr. Jones</name>
    ??? ??? <id>2</id>
    ??? ??? <age>31</age>
    ??? ??? <sex>male</sex>
    ??? </teacher>
    ??? <student>
    ??? ??? <name>macy</name>
    ??? ??? <id>2</id>
    ??? ??? <age>40</age>
    ??? ??? <sex>female</sex>
    ??? </student>
    ??? <student>
    ??? ??? <name>tom</name>
    ??? ??? <id>32</id>
    ??? ??? <age>31</age>
    ??? ??? <sex>male</sex>
    ??? </student>
    ??? <message>hello world</message>
    </fool>

    3.簡(jiǎn)單讀-----直接匹配name去讀

    ??? ??? // 首先對(duì)具體的xml文件構(gòu)建parser
    ??? ??? FileInputStream xmlFile = new FileInputStream("test1.xml");
    ??? ??? XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(xmlFile);
    ??? ???
    ??? ??? // 還需要StAXOMBuilder對(duì)象
    ??? ??? StAXOMBuilder builder = new StAXOMBuilder(parser);
    ??? ???
    ??? ??? OMElement doc = builder.getDocumentElement();????? //??? 讀到<fool></fool>??? ???
    ??? ???
    ??????? OMElement cre = doc.getFirstChildWithName(new QName("student"));? //讀到<student>
    ??? ???
    ??????? OMElement cre1 = cre.getFirstChildWithName(new QName("id"));? //??? 讀到<id></id>
    ??? ??? System.out.println(cre1.getLocalName()+":"+cre1.getText());
    ??? ??? cre1 = cre.getFirstChildWithName(new QName("name"));?????? //??? 讀到<name></name>
    ??? ??? System.out.println(cre1.getLocalName()+":"+cre1.getText());?
    ? ???
    ??? ??? cre1 = cre.getFirstChildWithName(new QName("age"));? ??? //??? 讀到<age></age>
    ??? ??? System.out.println(cre1.getLocalName()+":"+cre1.getText());???
    ???? ???
    ??? ??? cre1 = cre.getFirstChildWithName(new QName("sex"));?? ? //??? 讀到<sex></sex>
    ??? ??? System.out.println(cre1.getLocalName()+":"+cre1.getText());
    結(jié)果:
    id:12
    name:mac
    age:33
    sex:male


    4.復(fù)雜讀-----getChild

    ??? ??? FileInputStream xmlFile = new FileInputStream("test1.xml");
    ??? ??? XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(xmlFile);
    ??? ???
    ??? ??? StAXOMBuilder builder = new StAXOMBuilder(parser);

    ??? ??? OMElement doc = builder.getDocumentElement();
    ??? ???
    ??? ????Iterator<OMElement> iter = doc.getChildElements();
    ??? ??? while(iter.hasNext()){
    ??? ??? ??? OMElement temp = iter.next();
    ??? ??? ??? System.out.println("====================");
    ??? ??? ??? System.out.println(temp.getLocalName());
    ??? ??? ??? System.out.println(temp.getText());

    ??? ??? ??? if(temp.getLocalName().equals("student")){
    ??? ??? ??? ??? Iterator<OMElement> iter1 = temp.getChildElements();
    ??? ??? ??? ??? System.out.println("----------------");
    ??? ??? ??? ??? while(iter1.hasNext()){
    ??? ??? ??? ??? ??? OMElement temp1 = iter1.next();??? ??? ??? ??? ???
    ??? ??? ??? ??? ??? System.out.println(temp1.getLocalName()+":"+temp1.getText());
    ??? ??? ??? ??? }
    ??? ??? ??? }
    ??? ??? }
    結(jié)果:
    ====================
    student


    ----------------
    name:mac
    id:12
    age:33
    sex:male
    ====================
    student


    ----------------
    name:silly
    id:5
    age:12
    sex:female
    ====================
    teacher??


    ====================
    student


    ----------------
    name:macy
    id:2
    age:40
    sex:female
    ====================
    student


    ----------------
    name:tom
    id:32
    age:31
    sex:male
    ====================
    message
    hello world
    ?


    • Axiom寫XML:

    簡(jiǎn)單方式(基本方式,無ns,無attribute)

    1.建立節(jié)點(diǎn)???
    ??? ??? // 通常通過OMFactory來構(gòu)造XML文檔中的element
    ??? ??? OMFactory factory = OMAbstractFactory.getOMFactory();
    ??? ???
    ??? ??? //建立doc節(jié)點(diǎn),doc節(jié)點(diǎn)會(huì)和下面的root節(jié)點(diǎn)合并
    ??? ??? OMDocument doc = factory.createOMDocument();
    ???????
    ??? ??? //建立root節(jié)點(diǎn)
    ??? ??? OMElement root = factory.createOMElement(new QName("root"));
    ??? ???
    ??? ??? //建立兩個(gè)普通節(jié)點(diǎn)
    ??? ??? OMElement stu = factory.createOMElement(new QName("student"));
    ??? ??? stu.addChild(factory.createOMText("mac"));

    ??? ??? OMElement tea = factory.createOMElement(new QName("teacher"));
    ??? ??? tea.addChild(factory.createOMText("silly"));
    2.構(gòu)建樹??? ???
    ??? ??? //構(gòu)建樹,將兩個(gè)普通節(jié)點(diǎn)連到root節(jié)點(diǎn)上
    ??? ??? root.addChild(stu);
    ??? ??? root.addChild(tea);
    ??? ??? //構(gòu)建樹,將root節(jié)點(diǎn)連到doc節(jié)點(diǎn)上
    ??? ??? doc.addChild(root);
    3. 寫入文件
    ??? ??? // 構(gòu)建writer做輸出器
    ??? ??? XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(
    ??? ??????????? new FileOutputStream("2.xml"));
    ??? ??? root.serialize(writer); // cache on
    ??? ??? writer.flush();
    4. 看結(jié)果
    "2.xml"
    <root><student>mac</student><teacher>silly</teacher></root>

    此文件缺陷:
    1.沒有xml頁(yè)首的<?xml version="1.0" encoding="UTF-8"?>
    2.沒有回車換行
    5.試著用AXIOM讀
    ??? ??? FileInputStream xmlFile = new FileInputStream("2.xml");
    ??? ??? XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(xmlFile);
    ??? ???
    ??? ??? StAXOMBuilder builder = new StAXOMBuilder(parser);
    ??? ??? OMElement doc = builder.getDocumentElement();
    ??? ???
    ??? ??? Iterator<OMElement> iter = doc.getChildElements();
    ??? ??? while(iter.hasNext()){
    ??? ??? ??? OMElement temp = iter.next();
    ??? ??? ??? System.out.println("====================");
    ??? ??? ??? System.out.println(temp.getLocalName()+":"+temp.getText());
    ??? ??? }

    結(jié)果:
    ====================
    student:mac
    ====================
    teacher:silly



    Axiom寫XML,復(fù)雜方式

    1. 構(gòu)建節(jié)點(diǎn)
    ??? ??? // 通常通過OMFactory來構(gòu)造XML文檔中的element
    ??? ??? OMFactory factory = OMAbstractFactory.getOMFactory();
    ??? ???
    ??? ??? // 建立 namespace
    ??? ??? OMNamespace ns = factory.createOMNamespace("http://demo.axiom","x");
    ??? ??? OMNamespace ns1 = factory.createOMNamespace("http://ot.demo.axiom","y");
    ??? ???
    ??? ??? //建立doc節(jié)點(diǎn),doc節(jié)點(diǎn)會(huì)和下面的root節(jié)點(diǎn)合并
    ??? ??? OMDocument doc = factory.createOMDocument();
    ??? ???
    ??? ??? //建立root節(jié)點(diǎn)
    ??? ??? OMElement root = factory.createOMElement("root",ns);
    ??? ???
    ??? ??? //建立兩個(gè)普通節(jié)點(diǎn)
    ??? ??? OMElement stu = factory.createOMElement("student",ns1);
    ??? ??? stu.addChild(factory.createOMText("mac"));

    ??? ??? OMElement tea = factory.createOMElement("teacher", "http://namespace", "ns");
    ??? ??? tea.addChild(factory.createOMText("silly"));
    2.構(gòu)建樹??? ??? ??? ???
    ??? ??? //構(gòu)建樹,將兩個(gè)普通節(jié)點(diǎn)連到root節(jié)點(diǎn)上
    ??? ??? root.addAttribute(factory.createOMAttribute("attr", ns, "hello world"));
    ??? ??? root.addChild(stu);
    ??? ??? root.addChild(tea);
    ??? ??? //構(gòu)建樹,將root節(jié)點(diǎn)連到doc節(jié)點(diǎn)上
    ??? ??? doc.addChild(root);
    3. 輸出到文件或打印到屏幕??? ???
    ??? ??? // 構(gòu)建writer做輸出器
    ??? ??? XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(
    ??? ??????????? new FileOutputStream("2.xml"));
    ??? ??? root.serialize(writer); // cache on
    ??? ??? writer.flush();
    4.
    生成xml如下:
    <x:root xmlns:x="http://demo.axiom" x:attr="hello world"><y:student xmlns:y="http://ot.demo.axiom">mac</y:student><ns:teacher xmlns:ns="http://namespace">silly</ns:teacher></x:root>
    ?

    5.試著用AXIOM讀
    ??? ??? FileInputStream xmlFile = new FileInputStream("2.xml");
    ??? ??? XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(xmlFile);
    ??? ???
    ??? ??? StAXOMBuilder builder = new StAXOMBuilder(parser);
    ??? ??? OMElement doc = builder.getDocumentElement();
    ??? ???
    ??? ??? Iterator<OMElement> iter = doc.getChildElements();
    ??? ??? while(iter.hasNext()){
    ??? ??? ??? OMElement temp = iter.next();
    ??? ??? ??? System.out.println("====================");
    ??? ??? ??? System.out.println(temp.getLocalName()+":"+temp.getText());
    ??? ??? }

    結(jié)果:
    ====================
    student:mac
    ====================
    teacher:silly

    OMElement 節(jié)點(diǎn)修改

    ?

    public void update(OMElement element) throws XMLStreamException {//構(gòu)建節(jié)點(diǎn)本身element.build();//從父節(jié)點(diǎn)刪除本節(jié)點(diǎn)element.detach();//獲取節(jié)點(diǎn)的第一個(gè)子節(jié)點(diǎn)——symbolOMElement symbolElement = element.getFirstElement();//獲取這個(gè)子節(jié)點(diǎn)的文本值String symbol = symbolElement.getText();//獲取節(jié)點(diǎn)的第二個(gè)字節(jié)點(diǎn)——priceOMElement priceElement = (OMElement) symbolElement.getNextOMSibling();//獲取price的值String price = priceElement.getText();//把值放置到緩存中map.put(symbol, new Double(price));}

    string 轉(zhuǎn)成OMElement

    OMElement omBody = AXIOMUtil.stringToOM("<m:GetPrice xmlns:m=\"http://www.w3schools.com/prices\"><m:Item>Apples</m:Item></m:GetPrice>");

    用string 生成soap MessageContext public static MessageContext newMessageContext(String xmlpayload)throws AxisFault, XMLStreamException {MessageContext messageContext = new MessageContext();SOAPEnvelope envelope = factory.createSOAPEnvelope();factory.createSOAPBody(envelope);envelope.getBody().addChild(AXIOMUtil.stringToOM(xmlpayload));messageContext.setEnvelope(envelope);return messageContext; }



    總結(jié)

    以上是生活随笔為你收集整理的AXIOM 读写 xml文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。