Abrufen Wert von XML-Knoten und Knoten-Attribut mit XPath in JAXP

Gegeben sei ein xml-Dokument, das wie folgt aussieht:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <entry key="agentType">STANDARD</entry>
    <entry key="DestinationTransferStates"></entry>
    <entry key="AgentStatusPublishRate">300</entry>
    <entry key="agentVersion">f000-703-GM2-20101109-1550</entry>
    <entry key="CommandTimeUTC">2010-12-24T02:25:43Z</entry>
    <entry key="PublishTimeUTC">2010-12-24T02:26:09Z</entry>
    <entry key="queueManager">AGENTQMGR</entry>
</properties>

Will ich drucken die Werte der "key" - Attribut und das element so wie es aussieht dieses:

agentType = STANDARD
DestinationTransferStates = 
AgentStatusPublishRate = 300
agentVersion = f000-703-GM2-20101109-1550
CommandTimeUTC = 2010-12-24T02:25:43Z
PublishTimeUTC = 2010-12-24T02:26:09Z
queueManager = AGENTQMGR

Ich bin in der Lage, drucken Sie die Knoten Werte mit kein problem mit diesem code:

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

Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
    System.out.println(nodes.item(i).getNodeValue()); 
}

Und ich kann drucken Sie die Werte der "key" - Attribut, durch ändern der xpath-Ausdruck und den Knoten, Verfahren Sie wie folgt vor:

XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile("//properties/entry");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
    System.out.println(nodes.item(i).getAttributes().getNamedItem("key").getNodeValue()); 
}

Scheint es, wie gäbe es einen Weg, um an diese beiden Werte in einem einzigen evaluate. Ich konnte immer bewerten zwei Nodelisten und Durchlaufen Sie mit einem gemeinsamen index, aber ich bin mir nicht sicher, Sie sind garantiert in der gleichen Reihenfolge zurückgegeben. Anregungen geschätzt.

  • es sieht aus, als wenn die jaxp xml-code ist ziemlich chaotisch, sind Sie offen für eine andere Art von xml-apis?
  • Wenn ich das JAXP-code arbeiten, ich schrieb es in XSLT. Das war viel sauberer (sieht aus wie HTML mit einigen zusätzlichen markup), aber dauert ewig zum Rendern. Ich werde versuchen, die XSLT mit einem translet weiter. Andere Vorschläge, die durchaus zu begrüßen.
InformationsquelleAutor T.Rob | 2010-12-24
Schreibe einen Kommentar