Застряли при разборе объекта Document? - PullRequest
0 голосов
/ 06 октября 2011

Я пытаюсь разобрать мой объект Document, который похож на

<message>
<header>
<messageType>snmp</messageType>
<sendFrom>localhost</sendFrom>
<hostName>localhost</hostName>
<sendTo>192.168.0.15</sendTo>
<receiverName>receiverHost</receiverName>
<date>06/10/2011 17:34:55</date>
</header>
<body>
<snmpType>set</snmpType>
<ip>127.0.0.1</ip>
<community>public</community>
<variables>
  <variableBinding>
    <variable>TechDive.in</variable>
    <OID>1.3.6.1.4.1.8072.3.2.10</OID>
  </variableBinding>
  <variableBinding>
    <variable>TechDive.in</variable>
    <OID>1.3.6.1.4.1.8072.3.2.10</OID>
  </variableBinding>
  <variableBinding>
    <variable>TechDive.in</variable>
    <OID>1.3.6.1.4.1.8072.3.2.10</OID>
  </variableBinding>
  <variableBinding>
    <variable>TechDive.in</variable>
    <OID>1.3.6.1.4.1.8072.3.2.10</OID>
  </variableBinding>
  </variables>
  </body>
 </message>

Я хочу снять все с <variableBinding>, которые под <variables>, я действительно застрял в этом, потому что я новичок в разборе XML.

Я пытаюсь написать функцию, которая:

public Vector<VariableBinding> getVariables(Document document){ 

    Vector<VariableBinding> variables = new Vector<VariableBinding>();

    Element root = document.getRootElement();
    Element body = root.getChild("body");
    Element oidsElement = body.getChild("variables");
    Element variable = oidsElement.getChild("variable");

    for (Object currentOidObj : variable.getChildren()) {

        Element currentOid = (Element) currentOidObj;
        String oid = currentOid.getText();
        Element currentVariable = (Element) currentOidObj;

        Variable var = new OctetString(currentVariable.getText());
        OID oidObj = new OID(oid);

        VariableBinding v = new VariableBinding(oidObj,var);
        variables.add(v);
    }
    return variables;
}

Не могли бы вы помочь мне получить <variableBinding> с?

Спасибо всем

Ответы [ 3 ]

4 голосов
/ 06 октября 2011

Рассматривали ли вы использование XPath?

//variableBinding выберет все элементы variableBinding.

например:.

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//variableBinding");

Object result = expr.evaluate(doc, XPathConstants.NODESET);

NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
  ...
}
2 голосов
/ 06 октября 2011

Вам нужно сделать что-то вроде этого:

public Vector<VariableBinding> getVariables(Document document){ 

Vector<VariableBinding> variables = new Vector<VariableBinding>();

Element root = document.getRootElement();
Element body = root.getChild("body");
Element oidsElement = body.getChild("variables");

for (Object ovb: oidsElement.getChildren("variableBinding")) {

    Element vb = (Element) ovb;
    Variable var = new OctetString(vb.getChild("OID").getText());
    OID oidObj = new OID(vb.getChild("variable").getText());

    VariableBinding v = new VariableBinding(oidObj,var);
    variables.add(v);
}
return variables;
}
0 голосов
/ 06 октября 2011

Звучит так, будто вам лучше использовать SAX-парсер. В этом блоге приведен простой пример использования синтаксического анализатора SAX для анализа XML.

http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/

---- EDIT ---- На самом деле, вот лучше http://cs.au.dk/~amoeller/XML/programming/saxexample.html

...