我试图访问XML文档中元素中的元素。我认为我刚开始学习命名空间这一事实让我感到沮丧。
XSD标题
xsd:schema targetNamespace="urn:gtig:/my/namespace" xmlns:XX="urn:gtig:/my/namespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
因为原始文档不符合架构,所以我需要遍历元素并更新它们。但我似乎无法访问xml结构中的所有元素。这是一个像我一样的循环:
这很好用:
animals = @builder.doc.xpath("//myns:animal", 'myns' = 'urn:gtig:/my/namespace')
animals.each { |a|
a.attributes['type'].remove
a['newtype'] = "mammal"
但不是循环的下一部分:
c = a.xpath('cat/siamese')
也不是这样:
c = a.xpath("//myns:cat/siamese", 'myns' = 'urn:gtig:/my/namespace')
" C"是空的。所以,我能够访问动物,但不能访问其中的元素。
XML Doc
<message xmlns="urn:gtig:/my/namespace" xmlns:XX="urn:gtig:/my/namespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<animal type="mammal">
<cat>
<siamese>value</siamese>
</cat>
</animal>
</message>
答案 0 :(得分:0)
所以,我想出了我的问题部分,我需要将每个动物视为XML片段。所以,我需要这样做:
c = Nokogiri::XML::DocumentFragment.parse(a)
siamese_cat = c.xpath(.//cat/siamese)
现在的问题是我需要删除一个属性,并在siamese_cat上添加一个新属性,这是我现实生活中的一个节点集。还没有想出那个语法。
希望这会有助于其他人。