- Java XML 教程
- Java XML 首页
- Java XML 概述
- Java XML 解析器
- Java DOM 解析器
- Java DOM 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java SAX 解析器
- Java SAX 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- JDOM XML 解析器
- JDOM XML 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java StAX 解析器
- Java StAX 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java XPath 解析器
- Java XPath 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java DOM4J 解析器
- Java DOM4J 解析器
- 解析 XML 文档
- 查询 XML 文档
- 创建 XML 文档
- 修改 XML 文档
- Java XML 有用资源
- Java XML - 问答
- Java XML - 快速指南
- Java XML - 有用资源
- Java XML - 讨论
Java JDOM Document getDescendants() 方法
Java JDOM 的 getDescendants() 方法(Document 类的方法)检索 XML 文档的所有后代节点。我们可以过滤后代节点,只获取元素、只获取注释、获取注释或元素、获取具有特定名称或前缀的元素。
此方法返回一个 IteratorIterable 对象,该对象包含所有后代节点的列表(以 Content 对象的形式)。我们可以遍历 IteratorIterable 对象以访问每个 Content 对象。当在此方法上使用过滤时,它将返回指定过滤器的迭代器。例如,如果使用 Element 过滤器,则它将返回 Element 对象的迭代器。
语法
以下是 Java JDOM Document getDescendants() 方法的语法:
Document.getDescendants() Document.getDescendants(filter)
参数
Java JDOM Document getDescendants() 方法不接受任何参数或接受单个参数。
filter − 表示过滤器对象。
返回值
Java getDescendants() 方法返回 XML 文档中所有后代节点的迭代器。
示例 1
让我们在下面的 collegeData.xml 文件上应用 Java JDOM Document getDescendants() 方法:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Information of xyz college (last updated 24-07-2024) -->
<college>
<!-- All the three departments are listed -->
<department id="101">
<!-- Here, name represents the name of the department -->
<name>Computer Science</name>
<staffCount>20</staffCount>
</department>
<department id="102">
<name>Electrical and Electronics</name>
<staffCount>23</staffCount>
</department>
<department id="103">
<name>Mechanical</name>
<staffCount>15</staffCount>
</department>
</college>
下面的 getDescendants.java 程序在 collegeData.xml 文档上使用 Document 类的 getDescendants() 方法,并检索所有后代节点。
import java.io.File;
import java.util.Iterator;
import org.jdom2.Content;
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;
public class getDescendants {
public static void main(String args[]) {
try {
//Creating a SAXBuilder Object
SAXBuilder saxBuilder = new SAXBuilder();
//Reading the XML
File inputFile = new File("collegeData.xml");
//Parsing the XML Document
Document doc = saxBuilder.build(inputFile);
//Getting the descendants
Iterator<Content> list = doc.getDescendants();
//Iterating through the list
while(list.hasNext())
System.out.println(list.next());
} catch(Exception e) {
e.printStackTrace();
}
}
}
输出窗口显示所有后代节点(元素、文本内容和注释)。
[Comment: <!-- Information of xyz college (last updated 24-07-2024) -->]
[Element: <college/>]
[Text:
]
[Comment: <!-- All the three departments are listed -->]
[Text:
]
[Element: <department/>]
[Text:
]
[Comment: <!-- Here, name represents the name of the department -->]
[Text:
]
[Element: <name/>]
[Text: Computer Science]
[Text:
]
[Element: <staffCount/>]
[Text: 20]
[Text:
]
[Text:
]
[Element: <department/>]
[Text:
]
[Element: <name/>]
[Text: Electrical and Electronics]
[Text:
]
[Element: <staffCount/>]
[Text: 23]
[Text:
]
[Text:
]
[Element: <department/>]
[Text:
]
[Element: <name/>]
[Text: Mechanical]
[Text:
]
[Element: <staffCount/>]
[Text: 15]
[Text:
]
[Text:
]
示例 2
Filters.elements() 方法返回与 Element 匹配的数据。使用此方法,可以获得 Element 过滤器并将其作为参数传递给 getDescendants(Filter<Element>) 方法。它只过滤后代节点中的元素,并返回 Element 对象的迭代器。
在下面的示例中,我们解析了 collegeData.xml 文件,并使用 while 循环遍历迭代器来打印元素。
import java.io.File;
import java.util.Iterator;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.filter.Filter;
import org.jdom2.filter.Filters;
import org.jdom2.input.SAXBuilder;
public class getDescElements {
public static void main(String args[]) {
try {
//Creating the document from XML file
SAXBuilder saxBuilder = new SAXBuilder();
File inputFile = new File("collegeData.xml");
Document doc = saxBuilder.build(inputFile);
//Getting the descendants of Element type only
Filter<Element> element_filter = Filters.element();
Iterator<Element> list = doc.getDescendants(element_filter);
//Iterating through the list
while(list.hasNext())
System.out.println(list.next());
} catch(Exception e) {
e.printStackTrace();
}
}
}
输出窗口显示 XML 文档的所有元素名称。
[Element: <college/>] [Element: <department/>] [Element: <name/>] [Element: <staffCount/>] [Element: <department/>] [Element: <name/>] [Element: <staffCount/>] [Element: <department/>] [Element: <name/>] [Element: <staffCount/>]
示例 3
通过将其构造函数中元素的名称作为字符串传递,创建 ElementFilter 对象。将获得的 ElementFilter 对象作为参数传递给 getDescendants(ElementFilter) 方法。它只过滤具有 ElementFilter 指定的元素名称的元素。
下面的示例使用上述方法获取名称为“staffCount”的元素。使用 while 循环迭代获得的 Element 迭代器并打印元素。
import java.io.File;
import java.util.Iterator;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.filter.ElementFilter;
import org.jdom2.input.SAXBuilder;
public class getDescSpecificElements {
public static void main(String args[]) {
try {
//Creating the document from XML file
SAXBuilder saxBuilder = new SAXBuilder();
File inputFile = new File("collegeData.xml");
Document doc = saxBuilder.build(inputFile);
//Getting the descendants of Element with specific name
ElementFilter filter = new ElementFilter("staffCount");
Iterator<Element> list = doc.getDescendants(filter);
while(list.hasNext())
System.out.println(list.next());
} catch(Exception e) {
e.printStackTrace();
}
}
}
输出窗口显示所有名称为“staffCount”的元素。
[Element: <staffCount/>] [Element: <staffCount/>] [Element: <staffCount/>]
示例 4
Filters.comments() 方法返回与 Comment 匹配的数据。使用此方法,可以获得 Comment 过滤器并将其作为参数传递给 getDescendants(Filter<Comment>) 方法。它只过滤后代节点中的注释,并返回 Comment 对象的迭代器。
在下面的程序中使用了上述方法来获取所有 Comment 对象作为迭代器。使用 while 循环迭代获得的迭代器,将其打印到控制台。
import java.io.File;
import java.util.Iterator;
import org.jdom2.Comment;
import org.jdom2.Document;
import org.jdom2.filter.Filter;
import org.jdom2.filter.Filters;
import org.jdom2.input.SAXBuilder;
public class getDescComments {
public static void main(String args[]) {
try {
//Creating the document from XML file
SAXBuilder saxBuilder = new SAXBuilder();
File inputFile = new File("collegeData.xml");
Document doc = saxBuilder.build(inputFile);
//Getting the descendants of Comment type only
Filter<Comment> comment_filter = Filters.comment();
Iterator<Comment> list = doc.getDescendants(comment_filter);
//Iterating through the list
while(list.hasNext())
System.out.println(list.next());
} catch(Exception e) {
e.printStackTrace();
}
}
}
输出窗口显示文档中的所有注释。
[Comment: <!-- Information of xyz college (last updated 24-07-2024) -->] [Comment: <!-- All the three departments are listed -->] [Comment: <!-- Here, name represents the name of the department -->]