- 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 -->]