Данный XML-документ, который выглядит следующим образом:Получить значение узла XML и атрибутов узла с помощью XPath в JAXP
<?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>
Я хочу напечатать значения «ключа» атрибута и элемента, так это выглядит как это:
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
Я могу напечатать значения узлов без проблем, используя этот код:
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());
}
И я могу напечатать значения атрибута «ключ», изменив выражение XPath и методы узлов следующим образом:
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());
}
Похоже было бы способ получить в обоих из этих значений в одном evaluate
. Я всегда мог оценить два NodeLists и перебирать их с помощью общего индекса, но я не уверен, что они будут возвращены в том же порядке. Любые предложения оценили.
похоже, что xml-код jaxp довольно грязный, вы открыты для другого типа xml apis? –
Как только я получил код JAXP, я написал его в XSLT. Это было намного чище (выглядит как HTML с некоторой добавленной разметкой), но навсегда визуализируется. Теперь я собираюсь попробовать XSLT с траншетом. Другие предложения определенно приветствуются. –