从 XML 文件 (Java) 中的特定标签解析内容

Posted

技术标签:

【中文标题】从 XML 文件 (Java) 中的特定标签解析内容【英文标题】:Parse content from a specific tag in XML file (Java) 【发布时间】:2015-09-17 10:45:46 【问题描述】:

我有一个如下所示的 XML 文件,我需要使用 Java 生成一个 .txt 文件,其中包含标记中的纯文本,每一个都在一行中。

我读到我可以使用 SAX 来访问不同的标签,但是在这种情况下,在下面的示例中可能有随机标签,这是无效的。

执行此操作的最佳方法是什么?也许是正则表达式?

<?xml version="1.0" encoding="utf-8"?>
[...]
<source>
  <g id="_0">
    <g id="_1">First valid sentence</g>
  </g>
</source>
<source>Another valid string</source>

输出的 results.txt 应该是这样的:

First valid sentence
Another valid string

【问题讨论】:

已编辑。抱歉,我还没有阅读随机标签部分。我会将整个文档视为一个字符串,并首先尝试提取“随机”标签标识符。 使用 SAX,您只需等待开始标记,打开标志,然后收集您看到的所有字符,直到看到结束标记。只需忽略内部标签的开始和结束事件。 @JPMoresmau 所以在你的解决方案中我仍然需要使用正则表达式来丢弃 标签(上面的例子),如果存在的话。正确的?正如 Slow Trout 所建议的那样,将整个 XML 视为一个字符串并应用正则表达式不是更容易吗? 嗯,不,SAX 事件会告诉您“我开始源标签”,这就是您开始收集文本的提示。然后你会得到一个 SAX 事件,告诉你“我正在开始一个 g 标签”,这不会改变任何事情。然后当你得到一些你收集的文本时,直到你看到事件“关闭标签源”,你停止收集文本。 【参考方案1】:

您可以使用joox 库来解析xml 数据。使用其find() 方法可以获得所有&lt;source&gt; 元素,然后使用getTextContent() 提取其文本,例如:

import java.io.File;
import java.io.IOException;
import org.xml.sax.SAXException;
import static org.joox.JOOX.$;

public class Main 

    public static void main(String[] args) throws SAXException, IOException 
        $(new File(args[0]))
            .find("source")
            .forEach(elem -> System.out.println(elem.getTextContent().trim()));

    

我将假设一个格式良好的 xml 文件,例如:

<?xml version="1.0" encoding="utf-8"?>
<root>
    <source>
        <g id="_0">
            <g id="_1">First valid sentence</g>
        </g>
    </source>
    <source>Another valid string</source>
</root>

它产生:

First valid sentence
Another valid string

【讨论】:

以上是关于从 XML 文件 (Java) 中的特定标签解析内容的主要内容,如果未能解决你的问题,请参考以下文章

在 NodeJs 中使用 fast-xml-parser 将特定标签解析为数组

Java基础-xml解析

pom.xml文件中的Scope标签

使用 Sax Parser、Java 处理 XML 中的空标签

如何使用 PHP 从 XML“链接”标签中提取“href”属性?

使用 Python Etree 解析 XML 并返回指定的标签而不考虑命名空间