Objeto de script XMLDocument
Um wrapper de objeto JavaScript para analisar e extrair dados XML de um documento XML (Cadeia de caracteres).
Use esta classe Javascript para criar uma instância de 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 diretamente de 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 de XML de uma cadeia de caracteres XML que seja 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 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 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 podem ser iterados ou acessados 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 que é 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 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 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>