4
경우 동일한 노드에 정의 된 네임 스페이스와 노드를 검색 할, 내가 그들을 사용할 수 있습니다 : 나는 XML을 다음과 같이 수행하여야한다 무엇어떻게 조상 노드는 네임 스페이스를 정의
그러나> Nokogiri::XML(<<-XML
<?xml version='1.0' encoding='UTF-8'?>
<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:creator opf:role="aut">John Doe</dc:creator>
</metadata>
</package>
XML
> xml.at_xpath("//dc:creator[@opf:role='aut']", xml.at_xpath("//xmlns:metadata").namespaces).text
=> "John Doe"
?
> Nokogiri::XML(<<-XML
<?xml version='1.0' encoding='UTF-8'?>
<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="bookid">
<metadata>
<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf" opf:role="aut">John Doe</dc:creator>
</metadata>
</package>
XML
> xml.at_xpath("//dc:creator[@opf:role='aut']", xml.at_xpath("//xmlns:metadata").namespaces).text
Nokogiri::XML::XPath::SyntaxError: Undefined namespace prefix: //dc:creator[@opf:role='aut']
나는
at_xpath
에 대한
xml.remove_namespaces!
또는 문자 네임 스페이스 인수는 최후의 수단이라고 생각합니다.
나는 우리가 사전에 네임 스페이스를 알고있는 경우에 우리는 문자 그대로 네임 스페이스를 지정할 수 있다는 것을 알고 있지만, 어떻게 네임 스페이스 프로그래밍받을 수 있나요? – hiroshi
코드 샘플을 업데이트했습니다. –
감사! 나는'Nokogiri :: XML # collect_namespaces' 메소드를 발견하지 못했습니다. – hiroshi