如何解析给定格式的XML文件?

时间:2009-11-25 07:01:12

标签: java

如果我可以使用DOM / SAX解析器来解析以下格式的XML,我会很高兴。

<MMV>Sysdecs000110010101</MMV>
<Protocol name="SNMP">

    <CS CommandString="wmanIf2BsOfdmaTTG" oid="1.3.6.1.2.1.10.184.1.1.6.2.2.1.3.1" Get_SecurityString="public" Set_SecurityString="private" type="integer"></CS> 
    <CS CommandString="wmanIf2BsOfdmaRTG" oid="1.3.6.1.2.1.10.184.1.1.6.2.2.1.4.1" Get_SecurityString="public" Set_SecurityString="private" type="integer"></CS>
    <CS CommandString="wmanIf2BsOfdmaFrameDurationCode" oid="1.3.6.1.2.1.10.184.1.1.6.2.2.1.9.1" Get_SecurityString="public" Set_SecurityString="private" type="integer"></CS>
</Protocol>
<Protocol name="CLI">
    <CS CommandString="show clock" mode="usermode" type="get" username="aaa" password="bbb"/>
    <CS CommandString="show version" mode="usermode" type="get" username="bbb" password="ccc"/>
    <CS CommandString="set username" mode="configrmode" type="set" username="cc" password="ddd"/>
</Protocol>

谢谢你.........

4 个答案:

答案 0 :(得分:2)

通过这个简单的tutorial来理解DOM和SAX解析并尝试自己编写代码。如果您遇到困难,请询问具体问题。

答案 1 :(得分:0)

编写SAX ContentHandler很难写出来。

重载的startElement函数可以检查你是在一个协议还是一个CS,并根据哪一个,从被覆盖的字符函数中追加字符,并根据你所处的状态,将字符附加到一个少数几个字符串。

http://www.devshed.com/c/a/Python/Parsing-XML-with-SAX-and-Python/2/

上面的教程适用于Python,但由于Python非常容易阅读,因此您应该能够了解解析此内容所需的内容。

答案 2 :(得分:0)

我建议使用jDom。很久以前,我不得不用Java解析XML文件,但是当我不得不这样做时,我总是将jDom与XPath结合使用。这使得在元素列表中导航变得非常容易,并且使用适当的方法给予XML元素返回 - 例如 - Protocol对象。

public List<Protocol> parseXMLDoc(){
   List<Protocol> protocolObjs = new ArrayList<Protocol>();

   ...

   Document doc = ....; //the xml DOM document
   Element root = doc.getRootElement();

   List<Element> protChildElements = root.getChildren();
   foreach(Element protocolElement : protChildElements){
      Protocol obj = getProtocolObj(protocolElement);
      if(obj != null)
         protocolObjs.add(obj);

   }

   return protocolObjs;
}


private Protocol getProtocolObj(Element xmlProtocolElement){
   Protocol result = new Protocol();

   //parse the xml elements and set the data
   //through according setters of the Protocol obj
   Element csEl = xmlProtocolElement.getChild("cs");
   CS csObj = getCSObj(csEl);
   result.setCS(csObj);

   ...

   return result;
}

希望你有我的想法。请注意,我从头脑中写下了这个,所以我不能保证它会起作用:)

答案 3 :(得分:0)

您的XML代码段问题在于它的格式不正确。它看起来更像是一个多XML文档。标准库会有问题。可以使用SAX解析器或pull解析器,在报告根元素结束后重置解析器。使用拆分器后,您应该能够将这些SAX事件提供给XOM等库。这只是一个想法,我从来没有尝试过。