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

如何在Java中获取几个XML标记的所有内容,包括子标记和内容,java,xml-parsing,Java,Xml Parsing,在Java中,我知道许多不同的XML解析器,比如DOM、S(t)AX和变体。我多次使用它们,因此识别和读取一个标签的内容很简单 如何读取起始标记和结束标记之间的所有(嵌套)内容?中间可以是许多其他标记 XLST在它们之间有一个强制顺序时(例如,先获取tag1(和所有内容),然后获取tag2),则不会执行此操作。这将重复多次,直到扫描完整的XML文件 内容将包括其他标签。不应将该内容解析为单独的标记或内容 目的是在扫描文件时找到3个特殊标记 我看了类似的问题,没有任何结果。我通过字符串处理(ind

在Java中,我知道许多不同的XML解析器,比如DOM、S(t)AX和变体。我多次使用它们,因此识别和读取一个标签的内容很简单

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

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

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

目的是在扫描文件时找到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>

之前不知道getElementsByTagName(“*”)会这样做

`

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
文档doc=db.parse(文件);
doc.getDocumentElement().normalize();
System.out.println(“根元素”+doc.getDocumentElement().getNodeName());
NodeList NodeList=doc.getElementsByTagName(“*”);

对于(int i=0;i来说,似乎没有标准的解决方案。因此,扫描标记组时保持它们出现的顺序。保持顺序意味着我无法使用XSLT和类似的工具

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


如果您找到更好的解决方案,请让我知道。

考虑使用XSLT。感谢您的回答。在这种情况下,XLST不会起作用,因为我需要知道标记的顺序。相互检查后不会显示标记的顺序。这已经有一段时间了,但是“属性”会不会axis不保留秩序?感谢您的帮助。请详细说明。此解决方案无法回答我的问题。找到元素后,您仍然必须访问主元素的所有单独内容部分。
**** 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 *****
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());
    }