类 Document¶ ↑
类 Document 继承了其超类和包含模块的方法;请参阅
本页上的任务
新建文档¶ ↑
任务:创建空文档¶ ↑
使用方法 Document::new 创建一个空文档。
d = REXML::Document.new
任务:将字符串解析为新文档¶ ↑
使用方法 Document::new 将 XML 字符串解析为新文档
xml_string = '<root><a/>text<b/>more<c/></root>' d = REXML::Document.new(xml_string) d.root # => <root> ... </>
任务:将 IO 流解析为新文档¶ ↑
使用方法 Document::new 将 XML IO 流解析为新文档
xml_string = '<root><a/>text<b/>more<c/></root>' File.write('t.xml', xml_string) d = File.open('t.xml', 'r') do |file| REXML::Document.new(file) end d.root # => <root> ... </>
任务:从现有文档创建文档¶ ↑
使用方法 Document::new 从现有文档创建文档。上下文和属性被复制到新文档,但不包括子节点
xml_string = '<root><a/>text<b/>more<c/></root>' d = REXML::Document.new(xml_string) d.children # => [<root> ... </>] d.context = {raw: :all, compress_whitespace: :all} d.add_attributes({'bar' => 0, 'baz' => 1}) d1 = REXML::Document.new(d) d1.context # => {:raw=>:all, :compress_whitespace=>:all} d1.attributes # => {"bar"=>bar='0', "baz"=>baz='1'} d1.children # => []
任务:克隆文档¶ ↑
使用方法 Document#clone 克隆文档。上下文和属性被复制到新文档,但不包括子节点
xml_string = '<root><a/>text<b/>more<c/></root>' d = REXML::Document.new(xml_string) d.children # => [<root> ... </>] d.context = {raw: :all, compress_whitespace: :all} d.add_attributes({'bar' => 0, 'baz' => 1}) d1 = d.clone # => < bar='0' baz='1'/> d1.context # => {:raw=>:all, :compress_whitespace=>:all} d1.attributes # => {"bar"=>bar='0', "baz"=>baz='1'} d1.children # => []
文档类型¶ ↑
任务:获取文档类型¶ ↑
使用方法 Document#doctype 获取文档类型
d = REXML::Document.new('<!DOCTYPE document SYSTEM "subjects.dtd">') d.doctype.class # => REXML::DocType d = REXML::Document.new('') d.doctype.class # => nil
任务:设置文档类型¶ ↑
使用方法 document#add 添加或替换文档类型
d = REXML::Document.new('') d.doctype.class # => nil d.add(REXML::DocType.new('foo')) d.doctype.class # => REXML::DocType
XML 声明¶ ↑
任务:获取 XML 声明¶ ↑
使用方法 document#xml_decl 获取 XML 声明
d = REXML::Document.new('<!DOCTYPE document SYSTEM "subjects.dtd">') d.xml_decl.class # => REXML::XMLDecl d.xml_decl # => <?xml ... ?> d = REXML::Document.new('') d.xml_decl.class # => REXML::XMLDecl d.xml_decl # => <?xml ... ?>
任务:设置 XML 声明¶ ↑
使用方法 document#add 替换 XML 声明
d = REXML::Document.new('<!DOCTYPE document SYSTEM "subjects.dtd">') d.add(REXML::XMLDecl.new)
子节点¶ ↑
任务:添加元素子节点¶ ↑
使用方法 document#add_element 向文档添加元素
d = REXML::Document.new('') d.add_element(REXML::Element.new('root')) d.children # => [<root/>]
任务:添加非元素子节点¶ ↑
使用方法 document#add 向文档添加非元素
xml_string = '<root><a/>text<b/>more<c/></root>' d = REXML::Document.new(xml_string) d.add(REXML::Text.new('foo')) d.children # => [<root> ... </>, "foo"]
写入¶ ↑
任务:写入 $stdout¶ ↑
使用方法 document#write 将文档写入 $stdout
xml_string = '<root><a/>text<b/>more<c/></root>' d = REXML::Document.new(xml_string) d.write
输出
<root><a/>text<b/>more<c/></root>
任务:写入 IO 流¶ ↑
使用方法 document#write 将文档写入 $stdout
xml_string = '<root><a/>text<b/>more<c/></root>' d = REXML::Document.new(xml_string) File.open('t.xml', 'w') do |file| d.write(file) end p File.read('t.xml')
输出
"<root><a/>text<b/>more<c/></root>"
任务:写入时不缩进¶ ↑
使用方法 document#write 写入文档时不缩进
xml_string = '<root><a><b><c></c></b></a></root>' d = REXML::Document.new(xml_string) d.write({indent: 0})
输出
<root> <a> <b> <c/> </b> </a> </root>
任务:以指定的缩进写入¶ ↑
使用方法 document#write 写入文档时使用指定的缩进
xml_string = '<root><a><b><c></c></b></a></root>' d = REXML::Document.new(xml_string) d.write({indent: 2})
输出
<root> <a> <b> <c/> </b> </a> </root>
查询¶ ↑
任务:获取文档¶ ↑
使用方法 document#document 获取文档 (self
);覆盖 Element#document
xml_string = '<root><a><b><c></c></b></a></root>' d = REXML::Document.new(xml_string) d.document == d # => true
任务:获取编码¶ ↑
使用方法 document#document 获取文档 (self
);覆盖 Element#document
xml_string = '<root><a><b><c></c></b></a></root>' d = REXML::Document.new(xml_string) d.encoding # => "UTF-8"
任务:获取节点类型¶ ↑
使用方法 document#node_type 获取节点类型 (:document
);覆盖 Element#node_type
xml_string = '<root><a><b><c></c></b></a></root>' d = REXML::Document.new(xml_string) d.node_type # => :document
任务:获取根元素¶ ↑
使用方法 document#root 获取根元素
xml_string = '<root><a><b><c></c></b></a></root>' d = REXML::Document.new(xml_string) d.root # => <root> ... </>
任务:确定是否为独立文档¶ ↑
使用方法 document#stand_alone? 获取独立值
d = REXML::Document.new('<?xml standalone="yes"?>') d.stand_alone? # => "yes"
任务:获取版本¶ ↑
使用方法 document#version 获取版本
d = REXML::Document.new('<?xml version="2.0" encoding="UTF-8"?>') d.version # => "2.0"