---
sourceDocument: Referência de API do Xanadu
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/pt-BR/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - pt-BR

ft:publication_title :

    - Referência de API do Xanadu

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# Objeto de script XMLDocument

# Objeto de script XMLDocument {#ariaid-title1}

* Versão de lançamento: Xanadu
* 
* Atualizado 1 de ago. de 2024
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 3 min. de leitura

Um 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ócio Javascript permite consultar valores diretamente dos elementos e atributos XML.

## 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 por namespace, 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 a qualificação de namespace 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 nós 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 o namespace. Isso significa que, se você estiver localizando um nome de nó com namespace, por exemplo,. "\<names:myelement\> ...", a cadeia de caracteres de pesquisa do XPath seria "//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 no nó \[ e no 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 do 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 namespaces.

    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 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 a função setCurrent para posicionar onde o novo elemento será criado como um elemento secundário e use a função createElement 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>

* **[XMLHelper](https://servicenow-prod.fluidtopics.net/SlLC_ijR6rDQDGJR6FjFiA)**   
  A inclusão de script do auxiliar XML facilita a análise de XML em scripts.

