Objeto de script XMLDocument

  • Versão de lançamento: Zurich
  • Atualizado 31 de jul. de 2025
  • 3 min. de leitura
  • Wrapper de objeto JavaScript para analisar e extrair dados XML de um documento XML (cadeia de caracteres).

    Use esta classe JavaScript para instanciar um objeto 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 XMLDocument em uma regra de negócios JavaScript permite consultar valores dos elementos XML e atributos diretamente.

    Construtor

    O construtor de um objeto de script cria uma nova instância do objeto a ser usado.
    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 XMLDocument(xmlString);
    Para executar a análise XML de uma cadeia de caracteres XML qualificada para espaço de nome, especifique "verdadeiro" para o segundo argumento do construtor XMLDocument. A seguir está um exemplo de análise e cadeia de caracteres XML que contém qualificação de espaço de nome de seus elementos.
    var xmlString = "<bk:book xmlns:bk='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'>" +
                      "<bk:title>Cheaper by the Dozen</bk:title>" +
                      "<isbn:number>1568491379</isbn:number>" +
                    "</bk:book>";
    
    var xmldoc = new XMLDocument(xmlString, true); // XML document is name space aware
    

    Localizando nós e elementos

    Agora que temos o objeto XMLDocument, podemos chamar as seguintes APIs para localizar e. Elementos do documento XML, bem como extrair texto dele diretamente. A sintaxe de consulta para localizar nós e atributos é baseada em XPath.
    Nota:
    A análise de XML com este objeto não reconhece namespace, isso significa que se você estiver localizando um nome de nó com namespace nele, por exemplo, "<names:myelement> ...", a cadeia de caracteres de pesquisa do XPath será "//myelement"
    A seguir estão exemplos de como localizar um nó por seu XPath e obter o valor de texto do nó resultante.
    var str = xmldoc.getNodeText("//two"); // returns the first occurrence of the node
    // str == "abcd1234"
    
    str = xmldoc.getNodeText("//three");
    // str == "1234abcd"
    
    str = xmldoc.getNodeText("/test/one/*");
    // str == "abcd1234"
    
    str = xmldoc.getNodeInt("//number");
    // str == 1234
    
    Os exemplos a seguir localizam o nó por XPath e usam a API em nó e. elemento para obter atributos e valor.
    var node = xmldoc.getNode("/test/one/two");
    // node.getNodeName() == "two"
    // node.getNodeType() == "1" // 1 == ELEMENT_NODE
    // node.getLastChild().getNodeType() == "3" // 3 == TEXT_NODE
    // node.getLastChild().getNodeValue() == "abcd1234"
    Ou você pode usar as seguintes funções de conveniência para obter o nome e o tipo de nó
    str = xmldoc.getNodeName("//three");
    // str == "three"
    
    str = xmldoc.getNodeType("//three");
    // str == "1"
    Você também pode obter uma lista de nós que você pode iterar ou acessar diretamente por posição
    var nodelist = xmldoc.getNodes("//one/*"); // two, three, and two
    // nodelist.getLength() == "3"
    // nodelist.item(0).getNodeName() == "two"
    // nodelist.item(1).getNodeName() == "three"
    A seguir está um exemplo de análise de uma cadeia de caracteres XML qualificada com espaços de nome.
    var xmlString = "<bk:book xmlns:bk='urn:loc.gov:books' xmlns:isbn='urn:ISBN:0-395-36341-6'>" +
                      "<bk:title>Cheaper by the Dozen</bk:title>" +
                      "<isbn:number>1568491379</isbn:number>" +
                    "</bk:book>";
    
    var xmldoc = new XMLDocument(xmlString, true);
    var str = xmldoc.getNodeText("//bk:title"); // returns the first occurence of the node
    gs.log(str);
    
    str = xmldoc.getNodeText("/bk:book/*");
    gs.log(str);
    
    str = xmldoc.getNodeInt("//isbn:number");
    gs.log(str);

    Obtendo valores de atributo

    Um Atributo é apenas uma extensão de um nó e, portanto, tem todas as mesmas APIs.

    O exemplo a seguir mostra como consultar um nó para obter seu atributo por posição
    node = xmldoc.getNode("//two");
    // node.getAttributes().item(0).getNodeValue() == "xxx"
    
    str = xmldoc.getAttribute("//two", "att");
    // str == "xxx"
    O XPath também tem uma sintaxe de consulta para localizar o nó de atributo diretamente, por exemplo
    str = xmldoc.getNodeText("//*[@att=\"yyy\"]");
    // str == "1234abcd"
    
    str = xmldoc.getNode("//@boo").getNodeValue();
    // str == "yah"
    

    Criando novos elementos

    Um elemento XML pode ser criado em qualquer nível do documento XML depois de criado. Use DefinitAtual posição em que o novo elemento será criado como um elemento secundário e use CriarElemento função para criar o elemento.
    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 XMLDocument(xmlString);
    xmldoc.createElement("new", "test"); // creates the new element at the document element level if setCurrent is never called
    xmldoc.createElement("new2"); // calling without a value will create a new element by itself
    
    var el = xmldoc.createElement("new3");
    xmldoc.setCurrent(el); // this is now the parent of any new elements created subsequently using createElement()
    xmldoc.createElement("newChild", "test");
    O documento XML resultante é semelhante a este
    <test>
      <one>
        <two att="xxx">abcd1234</two>
        <three boo="yah" att="yyy">1234abcd</three>
        <two>another</two>
      </one>
      <number>1234</number>
      <new>test<new>
      <new2/>
      <new3>
          <newChild>test</newChild>
      </new3>
    </test>