es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Manejo de múltiples elementos XML con el mismo XPath.

Tengo problemas para modificar múltiples elementos con el mismo Xpath en el mismo XML. Aquí está el código:

* Settings *
Library    XML
Library    String

* Variables *
${XMLpath}   AbsolutePath.xml
${Xpath}    GM/BODY/CMss/message  #(hay dos elementos con este xpath)

* Test Cases *
TestCase
    ${root}  Parse Xml  ${XMLpath}
    @{CMmessage}     Get Elements Text   ${root}  ${Xpath}

${CMmessage1}  Set Variable  @{CMmessage}[1]
   #...Modificaciones CMmessage1...
Set  ${root}  ${CMmessage1}  \  ${Xpath} #Aquí falla debido a que hay varios elementos (2) coincidentes con el XPath

${CMmessage2}  Set Variable  @{CMmessage}[2]
   #...Modificaciones CMmessage2...
Set  ${root}  ${CMmessage1}  \  ${Xpath} #Aquí falla debido a que hay varios elementos (2) coincidentes con el XPath

Save Xml  ${root}  ${XMLpath}

Ahí está el problema, el Xpath dado no es único. He intentado con índice:

Set ${root} ${CMmessage1} \ ${Xpath}[1]

Set ${root} ${CMmessage1} \ ${Xpath}[2]

pero esto no fue útil … ¿Alguien tiene alguna idea de cómo manejar los índices en Robotframework-XMLlibrary?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en XML, XPath y Robotframework, sugiero utilizar la palabra clave Get Elements de la biblioteca de XML para recuperar ambos elementos con el mismo XPath primero. Luego, recorre los resultados y modifica cada elemento en consecuencia antes de establecer los elementos modificados de nuevo en el documento original con la palabra clave Set Element.

    Aquí hay un ejemplo de código que debería funcionar:

    *** Configuración ***
    Biblioteca  XML
    
    *** Variables ***
    ${XMLpath}  AbsolutePath.xml
    ${Xpath}  GM/BODY/CMss/message #(hay dos elementos con este XPath)
    
    *** Casos de prueba ***
    TestCase
        ${root}  Parse Xml  ${XMLpath}
    
        ${CMmessages}  Get Elements  ${root}  ${Xpath}
        PARA  ${CMmessage}  EN  @{CMmessages}
            # ... modificaciones del CMmessage ...
            Set Element  ${CMmessage}  ${Xpath}
        FIN
    
        Guardar Xml  ${root}  ${XMLpath}
    

    Este código recupera ambos elementos con el mismo XPath utilizando Get Elements, recorre cada elemento, los modifica en consecuencia y los establece de nuevo en el documento original con Set Element.

Comments are closed.