使用JOOX过滤XML字段

时间:2016-02-16 17:44:04

标签: java xml parsing filter joox

我需要过滤许多这样的XML文件:

<header>
   <type>1</type>
   <time>today</time>
</header>
<message>
   <Event...>
      <Counter...>
   ...
</message>

我只需要选择其header.type == 1的所有邮件内容。我从多个文件中读取我需要选择类型为== 1的邮件内容。

1 个答案:

答案 0 :(得分:0)

我只是很少更新您的XML结构以使其格式良好。以下是几个用于测试的XML文件:

========= one.xml ==========
<root>
   <header>
      <type>1</type>
   </header>
   <message>right</message>
</root>

========= two.xml ==========
<root>
   <header>
      <type>1</type>
   </header>
   <message>right</message>
</root>

========= three.xml ==========
<root>
   <header>
      <type>2</type>
   </header>
   <message>wrong</message>
</root>

简单的代码如下所示:

import java.io.File;

import static org.joox.JOOX.$;

public class JooxDemo {

    public static void main(String[] args) throws Exception {
        final File dirWithXmls = new File("xmls");

        for (File xmlFile : dirWithXmls.listFiles()) {

            final String message = $(xmlFile).xpath("//header[type='1']/../message").text();

            System.out.println(xmlFile.getName() + ", message: " + message);
        }
    }
}

输出:

one.xml, message: right
three.xml, message: null
two.xml, message: right

如果标题属于类型 1 ,则只能获取消息。< / p>

因此,您可以在简单的非空检查后删除.text()并使用消息节点执行所需操作。