我有这个工作代码:
require 'nokogiri'
NAMESPACES = {"xmlns:soap" => "http://schemas.xmlsoap.org/soap/envelope/", "xmlns:soap-enc" => "http://schemas.xmlsoap.org/soap/encoding/", "xmlns:cwmp" => "urn:dslforum-org:cwmp-1-0", "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", "xml:xsd" => "http://www.w3.org/2001/XMLSchema"}
b = Nokogiri::XML::Builder.new
b[:soap].Envelope(NAMESPACES) {
b[:soap].Header {}
b[:soap].Body {
b[:cwmp].GetParameterValues() {
b.ParameterNames() {
b.string "test"
}
}
}
}
puts b.to_xml
产生:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:cwmp="urn:dslforum-org:cwmp-1-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header/>
<soap:Body>
<cwmp:GetParameterValues>
<cwmp:ParameterNames>
<cwmp:string>test</cwmp:string>
</cwmp:ParameterNames>
</cwmp:GetParameterValues>
</soap:Body>
</soap:Envelope>
有没有办法避免“ParameterNames”和“string”节点上的命名空间“cwmp”?
由于
答案 0 :(得分:2)
一种方法是将默认命名空间添加到命名空间列表中。 Nokogiri将使用默认命名空间而不是父节点的命名空间。
只需将默认命名空间添加到NAMESPACES-hash中。默认命名空间的默认模式为"xmlns" => "http://someuri.org/"