Java JDOM Document 的 getContent() 方法



Java JDOM 的 getContent() 方法是 Document 类的方法,用于以 Content 对象的形式获取 XML 文档的所有内容的列表。此列表包含注释、根元素和 DTD 声明。

为了过滤内容对象以仅获取特定类型的内容(仅元素、仅注释等),可以使用 Filter 类的 Filter 方法创建特定内容的过滤器,并将这些过滤器作为参数传递给 getContent() 方法。

语法

以下是 Java JDOM Document 的 getContent() 方法的语法:

Document.getContent();
Document.getContent(index);
Document.getContent(filter);

参数

getContent() 方法是一个多态方法,具有以下参数:

  • index -

    表示要检索的内容对象的索引。
  • filter -

    表示 Filter 类创建的 Filter 对象。

返回值

Java getContent() 方法返回一个 Content 对象列表。

示例 1

以下是我们需要解析的 bookstore.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookstore[

<!ELEMENT bookstore (book+)>
<!ELEMENT book (name,author,price)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<!-- Information of a Bookstore (last updated 05-08-2024) -->
<!-- All the books in the store are listed -->
<bookstore>
   <book>
      <name>Treasure Island</name>
      <author>Robert Louis</author>
      <price>1400</price>
   </book>
   <book>
      <name>Oliver Twist</name>
      <author>Charles Dickens</author>
      <price>2000</price>
   </book>
   <book>
      <name>War and Peace</name>
      <author>Leo Tolstoy</author>
      <price>1500</price>
   </book>
</bookstore>

这是一个基本的 Java 程序,它使用 Java JDOM Document 的 getContent() 方法从上述 bookstore.xml 文件中获取所有内容。

import java.io.File;
import java.util.List;
import org.jdom2.Content;
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;

public class GetContent {
   public static void main(String args[]) {
      try {	
    	 //Reading the document
 		 SAXBuilder saxBuilder = new SAXBuilder();
 		 File inputFile = new File("bookstore.xml");
 		 Document doc = saxBuilder.build(inputFile);		 
 		 //Getting the content
	     List<Content> contentList = doc.getContent();
	     //Printing the list items
	     for(Content c : contentList) {
	    	System.out.println(c);
	     } 	           
      } catch (Exception e) {
    	 e.printStackTrace();
      }
   }
}

显示 XML 文档的所有内容对象。

[DocType: <!DOCTYPE bookstore>]
[Comment: <!-- Information of a Bookstore (last updated 05-08-2024) -->]
[Comment: <!-- All the books in the store are listed -->]
[Element: <bookstore/>]

示例 2

要获取特定索引处的内容对象,我们将一个整数索引传递给 getContent() 方法。如果索引不在内容大小范围内,则会抛出 IndexOutOfBoundsException 异常。

以下示例检索第 0 个索引处的内容:

import java.io.File;
import org.jdom2.Content;
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;

public class GetContent {
   public static void main(String args[]) {
      try {	
    	 //Reading the document
 		 SAXBuilder saxBuilder = new SAXBuilder();
 		 File inputFile = new File("bookstore.xml");
 		 Document doc = saxBuilder.build(inputFile);		 
 		 //Getting the content
	     Content content = doc.getContent(0);
	     System.out.println(content); 	           
      } catch (Exception e) {
    	 e.printStackTrace();
      }
   }
}

DTD 声明是文档的第一个内容对象;因此它被打印出来。

[DocType: <!DOCTYPE bookstore>]

示例 3

Filters 类的 element() 方法返回一个 Element 对象的 Filter 列表。此 Element 过滤器作为参数传递给 getContent() 方法,以仅从文档内部的内容中过滤元素。

在下面的程序中,我们只过滤了 Element 对象。

import java.io.File;
import java.util.List;
import org.jdom2.Content;
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 GetContent {
   public static void main(String args[]) {
      try {	
    	 //Reading the document
 		 SAXBuilder saxBuilder = new SAXBuilder();
 		 File inputFile = new File("bookstore.xml");
 		 Document doc = saxBuilder.build(inputFile);
 		 Filter<Element> element_filter = Filters.element();
 		 //Getting the content
	     List<Element> contentList = doc.getContent(element_filter);
	     //Printing the list items
	     for(Content c : contentList) {
	    	System.out.println(c);
	     } 	           
      } catch (Exception e) {
    	 e.printStackTrace();
      }
   }
}

只有一个根元素;因此它被打印出来。

[Element: <bookstore/>]

示例 4

Filters 对象的 comment() 方法返回一个 Comment 对象的 Filter 列表。此 Comment 过滤器作为参数传递给 getContent() 方法,以仅获取 Comment 对象。

这是一个使用 getContent() 方法仅过滤注释的 Java 程序:

import java.io.File;
import java.util.List;
import org.jdom2.Comment;
import org.jdom2.Content;
import org.jdom2.Document;
import org.jdom2.filter.Filter;
import org.jdom2.filter.Filters;
import org.jdom2.input.SAXBuilder;

public class GetContent {
   public static void main(String args[]) {
      try {	
    	 //Reading the document
 		 SAXBuilder saxBuilder = new SAXBuilder();
 		 File inputFile = new File("bookstore.xml");
 		 Document doc = saxBuilder.build(inputFile);
 		 Filter<Comment> comment_filter = Filters.comment();
 		 //Getting the content
	     List<Comment> contentList = doc.getContent(comment_filter);
	     //Printing the list items
	     for(Content c : contentList) {
	    	System.out.println(c);
	     } 	           
      } catch (Exception e) {
    	 e.printStackTrace();
      }
   }
}

bookstore.xml 文件的两个注释打印在控制台上。

[Comment: <!-- Information of a Bookstore (last updated 05-08-2024) -->]
[Comment: <!-- All the books in the store are listed -->]
广告