【发布时间】:2015-04-15 10:21:00
【问题描述】:
我需要创建一个 Java 程序,它将读取 XML 文件并在一行上打印节点属性。
以下 XML 是要处理的文件:
<TPVLog version="6.0">
<Snapshot time="1427376440905">
<Stats name="jvmRuntimeModule" statType="jvmRuntimeModule#" il="-2" type="COLLECTION">
<CS id="2" sT="1422004481541" lST="1427376440605" ct="234457">
</CS>
<CS id="3" sT="1422004481541" lST="1427376440605" ct="494333">
</CS>
<CS id="5" sT="1422004481541" lST="1427376440605" ct="0">
</CS>
</Stats>
<Stats name="systemModule" statType="systemModule" il="-2" type="MODULE">
<CS id="1" sT="1427192170123" lST="1427376470956" ct="61">
</CS>
</Stats>
</Snapshot>
</TPVLog>
我需要从 jvmRuntimeModule 行 cs id="3" value ct 打印出来 并从一行中的 cs id="1" 中的 systemModule 值 ct。
我试图通过以下方式获得结果:
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.dom4j.XPath;
public class DOM4JParserDemo {
public static void main(String[] args) throws DocumentException {
File inputFile = new File("tpv_as_aexwidget_1_1427376430227_1.xml");
SAXReader reader = new SAXReader();
Document document = reader.read( inputFile );
Element root = document.getRootElement();
for (Element snapshotElement : (List<Element>) root.elements("Snapshot")) {
XPath xpath=snapshotElement.createXPath("Stats[@name='connectionPoolModule']/RS[@id='9']/@cur");
System.out.printf("%s",xpath.evaluate(document.getRootElement()));
System.out.println("************** END ************************");
}
}
}
或
for (Element snapshotElement : (List<Element>) root.elements("Snapshot")) {
System.out.printf("Value: %s%s%s",
snapshotElement.selectObject("Stats[@name='jvmRuntimeModule']/CS[@id='2']/@ct"),
snapshotElement.selectObject("Stats[@name='systemModule']/CS[@id='1']/@ct"),
snapshotElement.selectObject("Stats[@name='connectionPoolModule']/RS[@id='9']/@cur")
).println();
System.out.println("*****************************************");
}
但我仍然有输出,打印行数等于文件中的快照数,但值为空。 我对Java没有太多经验,所以我想寻求帮助。
【问题讨论】: