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

标签 java xml xml-parsing

我有一堆 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/

相关文章:

java - 为 Julia 集生成自定义调色板

java - 需要从过滤 @WebFilter 中排除 js/css/jpg 等文件

c# - Azure 数据工厂将消息发布到 Azure 存储队列失败

java - 只需几行 Java 即可解析 XML?

python - 如何处理 API 响应

java - vaadin/java - 如何开发 Web 应用程序的多语言版本

java - android getlastknownlocation 在模拟器中始终为空

java - 使用 Java5 针对 XSD 进行验证时出现问题

python - 将 Python ElementTree 转换为字符串

android - 长时间运行的 XML 解析方法中的奇怪行为