반응형
Nokogiri를 사용하여 속성에 액세스하는 방법
일부 속성의 값에 액세스하는 간단한 작업이 있습니다. 이것은 Nokogiri::XML::Builder
간단한 XML 문서를 만드는 데 사용하는 간단한 스크립트입니다 .
require 'nokogiri'
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
xml.Placement(:messageId => "392847-039820-938777", :system => "MOD", :version => "2.0") {
xml.objects {
xml.object(:myattribute => "99", :anotherattrib => "333")
xml.nextobject_ '9387toot'
xml.Entertainment "Last Man Standing"
}
}
end
puts builder.to_xml
puts builder.root.attributes["messageId"]
결과는 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<Placement messageId="392847-039820-938777" version="2.0" system="MOD">
<objects>
<object anotherattrib="333" myattribute="99"/>
<nextobject>9387toot</nextobject>
<Entertainment>Last Man Standing</Entertainment>
</objects>
</Placement>
C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/document.rb:178:in `add_child': Document already has a root node (RuntimeError)
from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/node.rb:455:in `parent='
from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/builder.rb:358:in `insert'
from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/builder.rb:350:in `method_missing'
from C:/Documents and Settings/etrojan/workspace/Lads/tryXPATH2.rb:15
생성 된 XML은 정상적으로 보입니다. 그러나 속성에 액세스하려고하면 오류가 발생합니다.
Document already has a root node
puts
이 오류가 발생 하는 이유를 이해할 수 없습니다 .
사용 노코 기리 :: XML :: 리더하는 것은 귀하의 예를 들어 작동하지만, 아마 당신이 (가 없다는 것을 참고 찾고있는 전체 대답하지 아니 attributes
빌더를위한 방법 ).
reader = Nokogiri::XML::Reader(builder.to_xml)
reader.read #Moves to next node in document
reader.attribute("messageId")
reader.read
다시 발행 한 다음 시도 하면 현재 노드에이 속성이 없기 때문에 reader.attribute("messageId")
결과가 nil
나타납니다.
XML 문서를 속성별로 검색 하려면 Nokogiri :: XML :: Document를 사용하면됩니다.
doc = Nokogiri::XML(builder.to_xml)
elems = doc.xpath("//*[@messageId]") #get all elements with an attribute of 'messageId'
elems[0].attr('messageId') #gets value of attribute of first elem
다음은 다음을 사용하여 속성에 액세스하는 약간 더 간결한 방법입니다 Nokogiri
( xml
@atomicules의 답변에서 다루는대로 이미라는 변수에 xml이 저장되어 있다고 가정 ).
xml.xpath("//Placement").attr("messageId")
참조 URL : https://stackoverflow.com/questions/2901241/how-to-access-attributes-using-nokogiri
반응형
'programing' 카테고리의 다른 글
ClickOnce 오류 : 값이 예상 범위 내에 있지 않습니다. (0) | 2021.01.11 |
---|---|
typedef의 사용은 무엇입니까? (0) | 2021.01.11 |
C 프로그래머가 typedef를 사용하여 기본 유형의 이름을 바꾸는 이유는 무엇입니까? (0) | 2021.01.11 |
기본 Visual Studio 2010 및 2008 글꼴 (0) | 2021.01.11 |
IntelliJ IDEA 글로벌 검색 (0) | 2021.01.11 |