处理 XML(使用 REXML)
require 'rexml/document'
# 创建 XML 文档对象
xml_data = <<-XML
<root>
<person>
<name>John Doe</name>
<age>30</age>
</person>
<person>
<name>Jane Doe</name>
<age>25</age>
</person>
</root>
XML
document = REXML::Document.new(xml_data)
# 获取根元素
root = document.root
puts "Root element: #{root.name}"
# 遍历子元素
root.elements.each('person') do |person|
name = person.elements['name'].text
age = person.elements['age'].text
puts "Person: #{name}, Age: #{age}"
end
XSLT 转换(使用 Nokogiri)
require 'nokogiri'
# 创建 XML 文档对象
xml_data = <<-XML
<root>
<person>
<name>John Doe</name>
<age>30</age>
</person>
<person>
<name>Jane Doe</name>
<age>25</age>
</person>
</root>
XML
xml_document = Nokogiri::XML(xml_data)
# 创建 XSLT 样式表
xslt_data = <<-XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>People</h2>
<xsl:apply-templates select="root/person"/>
</body>
</html>
</xsl:template>
<xsl:template match="person">
<p><xsl:value-of select="name"/> - <xsl:value-of select="age"/> years old</p>
</xsl:template>
</xsl:stylesheet>
XSLT
xslt_stylesheet = Nokogiri::XSLT(xslt_data)
# 进行 XSLT 转换
result = xslt_stylesheet.transform(xml_document)
puts result.to_html
XPath 查询(使用 Nokogiri)
require 'nokogiri'
# 创建 XML 文档对象
xml_data = <<-XML
<root>
<person>
<name>John Doe</name>
<age>30</age>
</person>
<person>
<name>Jane Doe</name>
<age>25</age>
</person>
</root>
XML
xml_document = Nokogiri::XML(xml_data)
# 使用 XPath 查询
name_query_result = xml_document.xpath('//name')
age_query_result = xml_document.xpath('//age')
puts "Names:"
name_query_result.each { |name| puts name.text }
puts "\nAges:"
age_query_result.each { |age| puts age.text }
这是一个简单的教程,演示了如何使用 REXML 和 Nokogiri 来处理 XML、进行 XSLT 转换和使用 XPath 查询。在实际应用中,你可能需要处理更复杂的 XML 结构和 XSLT 样式表。
如有其他问题或需要进一步的说明,请随时提问。
转载请注明出处:http://www.zyzy.cn/article/detail/13451/Ruby