我需要像这样过滤许多 XML 文件:
<header>
<type>1</type>
<time>today</time>
</header>
<message>
<Event...>
<Counter...>
...
</message>
我只需要选择 header.type == 1 的所有消息内容。我正在从多个文件中读取我需要选择 type == 1 的消息内容。
我刚刚将您的 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()
节点执行您需要的操作。