0

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

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

我只需要选择 header.type == 1 的所有消息内容。我正在从多个文件中读取我需要选择 type == 1 的消息内容。

4

1 回答 1

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

如您所见,仅在header类型为1情况下才获取消息

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

于 2016-02-18T11:45:48.450 回答