如果我能有一个样例代码来使用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>
谢谢你......
发布于 2009-11-25 15:05:55
通过这个简单的tutorial来理解DOM和SAX解析,并尝试自己编写代码。如果你遇到困难,那就问一些具体的问题。
发布于 2009-11-25 15:05:56
在这种情况下编写一个SAX ContentHandler几乎不难。
重载的startElement函数可以只检查您是否处于协议或CS中,并根据哪一个,从覆盖的字符函数中追加字符,并根据您所处的状态,将字符追加到少数字符串中的一个。
http://www.devshed.com/c/a/Python/Parsing-XML-with-SAX-and-Python/2/
上面的教程是针对Python的,但由于Python很容易阅读,您应该能够掌握解析它所需的要点。
发布于 2009-11-25 15:40:52
我建议使用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;
}希望你明白我的想法。注意,这是我凭空写出来的,所以我不能保证它会工作:)
https://stackoverflow.com/questions/1795127
复制相似问题