Récupérer la valeur d'un nœud XML et le nœud d'attribut à l'aide de XPath dans JAXP

Donné un document xml qui ressemble à ce qui suit:

<?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>

Je veux imprimer les valeurs de la "clé" de l'attribut et de l'élément de sorte qu'il ressemble à ceci:

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

Je suis en mesure d'imprimer les valeurs de nœud sans problème à l'aide de ce 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()); 
}

Et je peux imprimer les valeurs de la "clé" de l'attribut par modification de l'expression xpath et le nœud méthodes comme suit:

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()); 
}

Il semble qu'il y aurait un moyen d'obtenir à la fois de ces valeurs dans un seul evaluate. J'ai toujours pu évaluer les deux élément nodelists et parcourir avec un indice commun, mais je ne suis pas sûr qu'ils sont garantis d'être retourné dans le même ordre. Toutes les suggestions apprécié.

il semble que si le jaxp du code xml est assez bordélique, êtes-vous ouvert à d'autres types de xml api?
Une fois que j'ai eu l'JAXP code de travail, je l'ai écrit en XSLT. C'était beaucoup plus propre (qui ressemble à du HTML avec certaines ajouté la balise) mais prend une éternité à rendre. Je vais essayer de XSLT avec un translet suivant. D'autres suggestions bienvenus.

OriginalL'auteur T.Rob | 2010-12-24