gpt4 book ai didi

java - 如何从 Java 中的 XML 文件中提取所有 PCDATA(文本)?

转载 作者:行者123 更新时间:2023-11-30 07:33:15 24 4
gpt4 key购买 nike

我有一堆 XML 文件和 DTD,每个文件都有一个 <TEXT>部分。 TEXT 的 DTD元素看起来像这样:

<!ELEMENT TEXT - - (AGENCY* | ACTION* | SUMMARY* | DATE* | FOOTNAME* | FURTHER* | SIGNER* | SIGNJOB* | FRFILING* | BILLING* | FOOTNOTE* | FOOTCITE* | TABLE* | ADDRESS* | IMPORT* | #PCDATA)+ >

这是一个示例 XML 文件的样子:

<ROOT>
...
<TEXT>
Some text that I want to extract
<SUMMARY> Some more text </SUMMARY>
<AGENCY>
An agency
<SIGNER> Bob Smith </SIGNER>
</AGENCY>
</TEXT>
...
</ROOT>

最后,我要提取

Some text that I want to extract Some more text An agency Bob Smith

但是,每个 <TEXT> block 显然在元素/排序方面不一样,或者你走了多远。在 Java 中有没有一种使用 DOM 的方法可以做到这一点?我更喜欢使用 DOM 而不是 SAX,但如果使用 SAX 更容易,那就这样吧。

提前致谢

最佳答案

XSLT 样式表可以工作:

更新 #2:我怀疑这是否适合您,因为您实际上使用的是 SGML 而不是 XML。赠品是您在问题中的元素声明具有标记最小化,这在 XML 中是不允许的。

更新:修改了 XML 输入和 XSLT 以仅显示 <TEXT> 中的文本结构。

XML 输入

<ROOT>
<IGNORE>ignore this data</IGNORE>
<TEXT>
Some text that I want to extract
<SUMMARY> Some more text </SUMMARY>
<AGENCY>
An agency
<SIGNER> Bob Smith </SIGNER>
</AGENCY>
</TEXT>
<IGNORE>ignore this data</IGNORE>
</ROOT>

XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:template match="/">
<xsl:value-of select="normalize-space(/ROOT/TEXT)"/>
</xsl:template>

</xsl:stylesheet>

输出

Some text that I want to extract Some more text An agency Bob Smith

注意:此 XSLT 仅在 TEXT 是 ROOT 的子项时才有效。如果 TEXT 可能嵌套更深,您可以将“select”更改为 select="normalize-space(//TEXT)" .

关于java - 如何从 Java 中的 XML 文件中提取所有 PCDATA(文本)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5989858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com