XMLDocument2 - escopo, global

  • Versão de lançamento: Zurich
  • Atualizado 31 de jul. de 2025
  • 8 min. de leitura
  • . XMLDocument2 A API é um wrapper de objeto JavaScript para analisar e extrair dados XML de uma cadeia de caracteres XML.

    Use esta classe JavaScript para criar um objeto a partir de uma cadeia de caracteres XML, geralmente um valor de retorno de uma invocação de serviço web ou a carga XML da Fila do ECC. Usar o objeto XMLDocument2 em uma regra de negócios JavaScript permite consultar valores dos elementos XML e atributos diretamente.

    Uma cadeia de caracteres XML tem uma estrutura de árvore e as partes da estrutura são chamadas de nós. Um objeto XMLDocument2 lida com dois tipos de nó, elemento e elemento de documento. Um nó de elemento é um nó com um nome e possivelmente atributos e nós secundários. Um nó de elemento de documento é o nó raiz da árvore XML. É o único nó sem um nó primário.

    Nota:
    Esta API funciona para aplicações globais ou com escopo.

    XMLDocument2 com escopo - XMLDocument2()

    Cria um objeto XMLDocument2.

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    Nenhum

    XMLDocument2 com escopo - XMLDocument2( GlideScriptableInputStream)

    Cria um objeto XMLDocument2 a partir de um fluxo de anexo.

    Tabela 2. Parâmetros
    Nome Tipo Descrição
    InputStream GlideScriptableInputStream O fluxo de entrada que o objeto XMLDocument2 encapsula.

    XMLDocument2 com escopo - createElement (nome da cadeia de caracteres)

    Cria e adiciona um nó de elemento ao nó atual. O nome do elemento é a cadeia de caracteres passada como um parâmetro. O novo elemento não tem nós secundários de texto.

    Tabela 3. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres Nome do novo elemento.
    Tabela 4. Retornos
    Tipo Descrição
    XMLNode Nó XML atual.
    var xmlString = "<test>" +
                    "  <one>" +
                    "    <two att=\"xxx\">abcd1234</two>" +
                    "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
                    "    <two>another</two>" +
                    "  </one>" +
                    "  <number>1234</number>" +
                    "</test>";
    var xmlDoc = new XMLDocument2();
    xmlDoc.parseXML(xmlString); 
    xmlDoc.createElement("new2"); 
     
    gs.info(xmlDoc);
    Saída:
    ?xml version="1.0" encoding="UTF-8"?>
    <test>  
        <one>    
            <two att="xxx">abcd1234</two>    
                <three att="yyy" boo="yah">1234abcd</three>    
            <two>another</two>  
        </one>  
        <number>1234</number>
        <new2></new2>
    </test>

    XMLDocument2 com escopo - createElementWithTextValue (nome da cadeia de caracteres, valor da cadeia de caracteres)

    Cria e adiciona um nó de elemento com um nó secundário de texto ao nó atual.

    Tabela 5. Parâmetros
    Nome Tipo Descrição
    nome Cadeia de caracteres Nome do elemento a ser adicionado.
    valor Cadeia de caracteres Valor de texto do elemento.
    Tabela 6. Retornos
    Tipo Descrição
    XMLNode Nó XML atual.
    var xmlString = "<test>" +
        "  <one>" +
        "    <two att=\"xxx\">abcd1234</two>" +
        "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
        "    <two>another</two>" +
        "  </one>" +
        "  <number>1234</number>" +
        "</test>";
    var xmlDoc = new XMLDocument2();
    xmlDoc.parseXML(xmlString); 
    xmlDoc.createElementWithTextValue("new", "test");
    gs.info(xmlDoc);
    Saída:
    <?xml version="1.0" encoding="UTF-8"?>
        <test>
            <one>
                <two att="xxx">abcd1234</two>    
                <three att="yyy" boo="yah">1234abcd</three>    
                <two>another</two>  
            </one>  
            <number>1234</number>
            <new>test</new>
        </test>

    XMLDocument2 com escopo - getDocumentElement()

    Obtém o nó do elemento do documento do objeto XMLdocument2. O nó do elemento do documento é o nó raiz.

    Tabela 7. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 8. Retorna
    Tipo Descrição
    XMLNode O elemento do documento.
    var xmlString = "<test>" +
                    "  <one>" +
                    "    <two att=\"xxx\">abcd1234</two>" +
                    "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
                    "    <two>another</two>" +
                    "  </one>" +
                    "  <number>1234</number>" +
                    "</test>";
    var xmlDoc = new XMLDocument2();
    xmlDoc.parseXML(xmlString);
    //returns the root node of the document tree.
    var rootNode = xmlDoc.getDocumentElement();
    gs.info(rootNode.getTextContent());
    Saída:
    abcd1234    1234abcd    another    1234

    XMLDocument2 com escopo - getFirstNode (cadeia de caracteres XPath)

    Obtém o primeiro nó no XPath especificado.

    Este método oferece suporte somente a um subconjunto de expressões XPath de predicado. Por exemplo, suponha o seguinte documento:
    <store> 
        <resources company="ABC Inc"> 
            <resources type="servers" /> 
        </resources> 
        <resources company="XYZ Inc"> 
            <resource type="bookstore"> 
                <book> 
                    <title>Windows</title> 
                    <price>10</price> 
                </book> 
                <book year="2009"> 
                    <title>Harry Potter</title> 
                    <price>50</price> 
                </book> 
                <book year="1999"> 
                    <title>Learning XML</title> 
                    <price>120</price> 
                </book> 
                <book year="2019"> 
                    <title>Learning Java</title> 
                    <price>99</price> 
                </book> 
            </resource> 
        </resources> 
    </store> 
    Este método oferece suporte às seguintes expressões XPath com predicados:
    "/store/resources/resource[@type='bookstore']/book[@year='1999']", 
    "/store/resources/resource[@type='bookstore']/book[@year]", 
    "/store/resources/resource[@type='bookstore']/book[price > 100]" 
    No entanto, ele não oferece suporte às seguintes expressões XPath com predicados:
    "/store/resources/resource[@type='bookstore']/book[2]", 
    "/store/resources/resource[@type='bookstore']/book[last()]", 
    "/store/resources/resource[@type='bookstore']/book[position()>2]" 

    Para contornar isso, use XPath sem predicados, como "/store/resources/resource") e, em seguida, filtre os nós no script usando GetFirstNode() e. GetNextNode() métodos.

    Tabela 9. Parâmetros
    Nome Tipo Descrição
    xPath Cadeia de caracteres O XPath do qual obter o nó.
    Tabela 10. Retornos
    Tipo Descrição
    XMLNode O primeiro nó.
    var xmlString = "<test>" +
      "  <one>" +
      "    <two att=\"xxx\">abcd1234</two>" +
      "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
      "    <two>another</two>" +
      "  </one>" +
      "  <number>1234</number>" +
      "</test>";
    var xmlDoc = new XMLDocument2();
    xmlDoc.parseXML(xmlString);
    var foo = xmlDoc.getFirstNode('/test/one/two');
    gs.info(foo.getTextContent());
    Saída:
    abcd1234

    XMLDocument2 com escopo - getNextNode(objeto atual)

    Obtém o nó após o nó especificado.

    Tabela 11. Parâmetros
    Nome Tipo Descrição
    atual Objeto O nó atual.
    Tabela 12. Retornos
    Tipo Descrição
    XMLNode O próximo nó.
    var xmlString = "<test>" +
                    "  <one>" +
                    "    <two att=\"xxx\">abcd1234</two>" +
                    "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
                    "    <two>another</two>" +
                    "  </one>" +
                    "  <number>1234</number>" +
                    "</test>";
    var xmlDoc = new XMLDocument2();
    xmlDoc.parseXML(xmlString);
    var foo = xmlDoc. getFirstNode('/test/one/two');
    var foo2 = xmlDoc.getNextNode(foo);
    gs.info(foo.getTextContent());
    gs.info(foo2.getTextContent());
    Saída:
    abcd1234
    
    another

    XMLDocument2 com escopo - getNode(cadeia de caracteres XPath)

    Obtém o nó especificado no XPath.

    Nota:
    Este método se destina ao uso com documentos pequenos, pois analisa todo o documento para corresponder à expressão XPath. Se o documento for muito grande, poderá ocorrer um erro de falta de memória. Para documentos grandes, use GetFirstNode (cadeia de caracteres XPath) e. GetNextNode(objeto atual) métodos, que são projetados para transmitir por meio do documento sem analisar todo o documento.
    Tabela 13. Parâmetros
    Nome Tipo Descrição
    xPath Cadeia de caracteres XPath do nó a ser obtido.
    Tabela 14. Retornos
    Tipo Descrição
    XMLNode Nó XML atual.
    /*
     * Checks if given node indeed of given tag.
     * Params:
     *  tag - String, name of tag to check
     *  node - XMLNode, node in which to check for the tag
     * Returns:
     *  true, if tag is present
     *  false, otherwise
     */
    function isNodeOfTag (node, tag) {
      try {
        if (tag == node.getNodeName()) {
          gs.info("Given node belongs to tag " + tag);
          return true;
        }
      } catch (error) {
        gs.error("Given node might not belong to tag " + tag + ". Error while checking: " + error);
        return false;
      }
    }
    
    var xmlString = "<test>" +
                    "  <one>" +
                    "    <two att=\"xxx\">abcd1234</two>" +
                    "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
                    "    <two>another</two>" +
                    "  </one>" +
                    "  <number>1234</number>" +
                    "</test>";
    
    var xmlDoc = new XMLDocument2();
    xmlDoc.parseXML(xmlString);
    
    var node = xmlDoc.getNode("/test/one/two"); // tag 'two' is present in this XML.
    isNodeOfTag(node, "two");
    
    var node = xmlDoc.getNode("/test/one/four"); // tag 'four' is not present in this XML.
    isNodeOfTag(node, "four");
    Saída:
    Given node belongs to tag two
    Given node might not belong to tag four. Error while checking: java.lang.NullPointerException

    XMLDocument2 com escopo - getNodeText (cadeia de caracteres XPath)

    Obtém todos os nós secundários de texto do nó referenciado no XPath especificado.

    Tabela 15. Parâmetros
    Nome Tipo Descrição
    xPath Cadeia de caracteres XPath do texto a ser obtido.
    Tabela 16. Retornos
    Tipo Descrição
    Cadeia de caracteres Secundários de texto no XPath.
    var xmlString = "<test>" +
                    "  <one>" +
                    "    <two att=\"xxx\">abcd1234</two>" +
                    "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
                    "    <two>another</two>" +
                    "  </one>" +
                    "  <number>1234</number>" +
                    "</test>";
    var xmlDoc = new XMLDocument2();
    xmlDoc.parseXML(xmlString); 
    gs.info(xmlDoc.getNodeText("//two"));

    Saída:

    abcd1234

    XMLDocument2 com escopo - parseXML(cadeia de caracteres xmlDoc)

    Analisa a cadeia de caracteres XML e a carrega no objeto XMLDocument2.

    Tabela 17. Parâmetros
    Nome Tipo Descrição
    XmlDoc Cadeia de caracteres O documento a ser analisado.
    Tabela 18. Retornos
    Tipo Descrição
    Booliano Sinalizador que indica se o conteúdo foi analisado.

    Este exemplo analisa o xmlString e o carrega no objeto xmlDocument2.

    var xmlString = "<test>" +
                    "  <one>" +
                    "    <two att=\"xxx\">abcd1234</two>" +
                    "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
                    "    <two>another</two>" +
                    "  </one>" +
                    "  <number>1234</number>" +
                    "</test>";
    var xmlDoc = new XMLDocument2();
    xmlDoc.parseXML(xmlString); 
    var rootNode = xmlDoc.getDocumentElement();

    XMLDocument2 com escopo - setCurrentElement(elemento XMLNode)

    Torna o nó passado como parâmetro o nó atual.

    Tabela 19. Parâmetros
    Nome Tipo Descrição
    elemento XMLNode O nó do elemento a ser definido como o nó atual.
    Tabela 20. Retornos
    Tipo Descrição
    vazio
    var xmlString = "<test>" +
                    "  <one>" +
                    "    <two att=\"xxx\">abcd1234</two>" +
                    "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
                    "    <two>another</two>" +
                    "  </one>" +
                    "  <number>1234</number>" +
                    "</test>";
    var xmlDoc = new XMLDocument2();
    xmlDoc.parseXML(xmlString);
    //returns the root node of the document tree.
    var rootNode = xmlDoc.getDocumentElement(); //returns org.w3c.dom.Element
    // sets the root node as the current element
    xmlDoc.setCurrentElement(rootNode);

    XMLDocument2 com escopo - setEnableCDATAReporting (habilitação booliana)

    Define se os nós são tratados como CDATA ou texto regular após a análise. A emissão de relatórios CDATA é desativada por padrão.

    Este método deve ser chamado com XMLDocument2 com escopo - parseXML(cadeia de caracteres xmlDoc).

    Consulte também: XMLNode com escopo - isCDATANode().

    Tabela 21. Parâmetros
    Nome Tipo Descrição
    ativar Booliano Sinalizador que indica se nós CDATA devem ser manipulados como CDATA ou nós de texto regulares.
    Valores válidos:
    • Verdadeiro: Habilite a emissão de relatórios CDATA.
    • Falso: Manipule nós CDATA como nós de texto regulares após analisá-los e concatená-los com o texto adjacente.

    Padrão: Falso

    Tabela 22. Retornos
    Tipo Descrição
    Nenhum(a)

    O exemplo a seguir mostra como o CDATA é analisado em um elemento com emissão de relatórios CDATA ativados. O resultado de GetFirstChild() é um elemento que contém o valor de texto outro . Internamente, este elemento contém as informações que o identificam como um tipo CDATA. O resultado de Content.getLastChild() é um elemento que contém o valor de texto elemento . Internamente, este elemento contém as informações como um tipo de texto.

    var xmlString = "<test>" +
      "  <one>" +
      "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
      "    <two><![CDATA[another]]>element</two>" +
      "  </one>" +
      "  <number>1234</number>" 
      "</test>";
    var xmlDoc = new XMLDocument2();
    xmlDoc.setEnableCDATAReporting(true); // Enable CDATA reporting
    xmlDoc.parseXML(xmlString);
    var content = xmlDoc.getFirstNode('/test/one/two');
    gs.info(content.getFirstChild().getTextContent()); // prints "another"
    gs.info(content.getLastChild().getTextContent()); // prints "element"

    Saída:

    another
    element
    Nota:
    Sem o relatório CDATA ativado no exemplo, todo o secundário concatena o CDATA como texto com o restante do texto ( elemento em cada linha da seguinte forma:
    anotherelement
    anotherelement

    XMLDocument2 com escopo - setNamespaceAware (Aware booliano)

    Quando definido como verdadeiro, o objeto XMLDocument2 processa o documento com namespaces XML.

    Se você não definir isso, um documento XML com namespaces não será enumerado corretamente e uma pesquisa XPath falhará. 

    Tabela 23. Parâmetros
    Nome Tipo Descrição
    ciente Booliano Quando verdadeiro, o objeto XMLDocument2 processa o documento com namespaces XML.
    Tabela 24. Retornos
    Tipo Descrição
    vazio

    XMLDocument2 com escopo - toString()

    Retorna uma cadeia de caracteres que contém o XML.

    Tabela 25. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 26. Retorna
    Tipo Descrição
    Cadeia de caracteres Uma cadeia de caracteres que contém o XML.
    var xmlString = "<test>" +
                    "  <one>" +
                    "    <two att=\"xxx\">abcd1234</two>" +
                    "    <three boo=\"yah\" att=\"yyy\">1234abcd</three>" +
                    "    <two>another</two>" +
                    "  </one>" +
                    "  <number>1234</number>" +
                    "</test>";
    var xmlDoc = new XMLDocument2();
    xmlDoc.parseXML(xmlString);
    gs.info(xmlDoc.toString());
    Saída - As quebras de linha foram adicionadas à saída para facilitar a leitura.
    <?xml version="1.0" encoding="UTF-8"?>
    <test>  
    <one>    
    <two att="xxx">abcd1234</two>    
    <three att="yyy" boo="yah">1234abcd</three>    
    <two>another</two>  
    </one>  
    <number>1234</number>
    </test>