Pergunta

Tudo bem, eu tenho um documento XML que é algo como isto:

    <xml>
     <list>
      <partner>
       <name>Some Name</name>
       <status>active</status>
       <id>0</id>
      </partner>
      <partner>
       <name>Another Name</name>
       <status>active</status>
       <id>1</id>
      </partner>
    </list>
   </xml>

Eu estou usando lib-xml do Ruby para analisá-lo. Quero descobrir se existe um parceiro com o nome 'Alguns Name' de uma forma rápida e rubi idiomática.

Como posso fazer isso em uma linha ou código de rubi, assumindo eu tenho um documento analisado em um documento variável chamada .. Tal que eu posso chamar document.find (XPath) para recuperar os nós. Eu tive que fazer isso várias vezes em um pouco diferentes cenários e agora está começando a me incomodar.

Eu sei que eu posso fazer o seguinte (mas seu feio)

 found = false
 document.find('//partner/name').each do |name|
  if (name.content == 'Some Name')
   found = true
   break
  end
 end
 assert(found, "Some Name should have been found")

mas eu acho isso muito feio. Pensei em usar a enumeração inclui? método mixin, mas que ainda não trabalho vai porque eu preciso para obter o campo .content de cada nó em oposição ao nó real ... Enquanto escrevia este, I embora isso (mas parece um tanto ineficiente embora elegante)

found = document.find('//partner/name').collect{|name| name.content}.member?("Some Name")

Existem outras maneiras de fazer isso?

Foi útil?

Solução

O que sobre isso?

found = document.find("//partner[name='Some Name']").empty?

Outras dicas

Eu tentei esta solução:

 found = document.find("//partner[name='Some Name']") != nil

mas eu tenho um erro dizendo a expressão XPath era inválido. No entanto, eu estava lendo alguma documentação xpath que parece que você pode chamar uma função text () na expressão para obter o nó de texto. Eu tentei o seguinte e parece trabalho:

 found = document.find("//partner/name/text()='Some Name'")

encontrados na verdade não é um nó xml mas um verdadeiro / falso objeto para isso funciona.

Gostaria de usar uma linguagem que nativamente opera em XML (XQuery por exemplo). Com XQuery, é possível formular este tipo de consultas sobre dados XML de uma forma concisa e elegante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top