在 Ruby 中,你可以使用 REXML 库来处理 XML,Nokogiri 库来进行 XSLT 转换和 XPath 查询。以下是一个简单的教程,演示如何在 Ruby 中使用这些库来处理 XML、进行 XSLT 转换和使用 XPath 查询。

处理 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.pingtaimeng.com/article/detail/13451/Ruby