rel=“nofollow noreferer”>Nokogiri 文件:
姓名空间与属性相类似。 Nokogiri:XML:Builder
假设,在“xmlns”开始时,它就是一个名称空间:
builder = Nokogiri::XML::Builder.new { |xml|
xml.root( xmlns => default , xmlns:foo => bar ) do
xml.tenderlove
end
}
puts builder.to_xml
产出XML类似:
<?xml version="1.0"?>
<root xmlns:foo="bar" xmlns="default">
<tenderlove/>
</root>
回答你的具体问题,只是:
require nokogiri
NS = {
"xmlns:p" => "http://www.acme.com",
"xmlns:p1" => "http://www.acme.com/datatypes",
"xmlns:p2" => "http://www.acme.com/ACMRequestdatatypes",
"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
}
builder = Nokogiri::XML::Builder.new { |xml|
xml.ACMRequest(NS) do
xml.GetQuote
end
}
puts builder.to_xml
#=> <?xml version="1.0"?>
#=> <ACMRequest xmlns:p="http://www.acme.com" xmlns:p1="http://www.acme.com/datatypes" xmlns:p2="http://www.acme.com/ACMRequestdatatypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
#=> <GetQuote/>
#=> </ACMRequest>
至于名称空间,根本要素本身即为......
<p:ACMRequest xmlns:p="…">…</p:ACMRequest>
...... 我无法说明在创建时如何对诺科吉里的第一个要素适用一个名称空间。 相反,在创建文件后,你必须使用名称空间:
root = builder.doc.root
acme = root.namespace_definitions.find{ |ns| ns.href==NS["xmlns:p"] }
root.namespace = acme
puts builder.to_xml
#=> <?xml version="1.0"?>
#=> <p:ACMRequest xmlns:p="http://www.acme.com" xmlns:p1="http://www.acme.com/datatypes" xmlns:p2="http://www.acme.com/ACMRequestdatatypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">atypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
#=> <GetQuote/>
#=> </p:ACMRequest>
或者,你可以::
# This happens to work for now, but I doubt you should rely upon it.
builder.doc.root.name = "p:ACMRequest"
Per “ • 如何用Nokogiri Buildinger制作带有名下根成分的XML文件。”
builder = Nokogiri::XML::Builder.new { |xml|
xml.ACMRequest(NS) do
xml.parent.namespace = … # find the ns in xml.parent.namespace_definitions
# …
end
end