如何获取几个 XML 标签的所有内容,包括子标签和 Java 中的内容

How to get ALL content of a few XML tags including children tags and content in Java

在 Java 中,我知道许多不同的 XML 解析器,例如 DOM、S(t)AX 和变体。我用过很多次,所以识别和阅读一个标签的内容很简单。

如何读取起始标记和结束标记之间的 ALL(嵌套)内容? 中间可以有多个其他标签。

XLST 在它们之间存在强制顺序时不会执行此操作,例如首先获取 tag1(和所有内容),然后获取 tag2。这将重复多次,直到完整的 XML 文件被扫描。

内容将包含其他标签。该内容不应被解析为单独的标签或内容。

目的是在扫描文件时找到 say 3 个特殊标签。

我看了类似的问题没有结果。我通过字符串处理(indexOf 等)对其进行编程,但这可能不是最优雅的解决方案。

假设我有这个 XML 文件:

<parent
  <level1>
    <level2a>
      **** i need all content from this line
      <p>... etc ... </p>
      to this line ****
    </level2a>
  </level1>
  <level2b class="d">
    **** and all content from this line
    content of 2b possibly with child / other tags
    to this line *****
  </level2b>
  <level2b other="e">
    this content is not useful
  </level2b>
  ...
</parent>

假设我需要''''的所有内容,包括任何子标签和内容.我怎样才能在 Java 内完成这项工作?

结果将是:

**** i need all content from this line
<p>... etc ... </p>
to this line ****

**** and all content from this line
content of 2b possibly with child / other tags
to this line *****

之前不知道 getElementsByTagName("*") 这样做,

`

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(file);
    doc.getDocumentElement().normalize();
    System.out.println("Root element " + doc.getDocumentElement().getNodeName());

    NodeList nodeList=doc.getElementsByTagName("*");
    for (int i=0; i<nodeList.getLength(); i++) 
    {
        // Get element
        Element element = (Element)nodeList.item(i);
        System.out.println(element.getNodeName());
    }

`

这个好像没有标准的解决办法。因此,扫描标签组时保持它们出现的顺序。保持顺序意味着我不能使用 XSLT 和类似的东西。

终于用 Sax 创建了我的通用解决方案。

如果您找到更好的解决方案,请告诉我。