【问题标题】:Java XML parser - get proper outputJava XML 解析器 - 获得正确的输出
【发布时间】: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没有太多经验,所以我想寻求帮助。

【问题讨论】:

    标签: java xml parsing


    【解决方案1】:

    使用 Java 编写此代码的唯一可能原因是,如果您碰巧熟悉 Java,但没有时间学习专门为此类任务设计的语言,例如 XSLT 和 XQuery。由于您不是 Java 专家,因此该理由不适用于您。

    我不确定您希望输出的具体外观如何,但您可以从运行以下 XQuery 开始:

    //Snapshot/concat(
       Stats[@name="jvmRuntimeModule"]/CS[@id='3']/@ct, 
       '&#xa;',
       Stats[@name="systemModule"]/CS[@id='1']/@ct) 
    

    根本不需要任何Java代码。

    【讨论】:

    • 它在 AIX 上,使用 Java 对我来说是最容易的,因为在 Python 或 Perl 中我无法构建能够工作的东西。对于输出,我只需要通过 System.out.printf 获取一行上的所有值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多