Usuário com melhor resposta
XML string

Pergunta
-
Estou em web service recebendo um "xml" mas nao se trata exatamente uma xml... é um xml que foi convertido para string...
Eu tenho um retorno do webserivce da seguinte forma
<nomeCliente>
<nrpedido>999</nrpedido>
<nrpedido>999</nrpedido>
<nrpedido>999</nrpedido>
</nomeCliente>
String
Eu preciso ler todos os pedidos mas nao sei como "converter para xml" e ler os parametros... se alguem souber ou tiver indicaçao de algum tutorial bom.... vb.net
Obrigado desde ja
Respostas
-
Olá Under,
Para baixar um xml e abstratar ele na aplicação sugiro o seguinte:
dê um Imports pra usar xml na classe que usará o objeto
Code SnippetImports System.XmlDepois Crie uma String para armazenar o caminho do seu Xml, nela você pode chamar o seu webservice que retorna esses valores:
Ex:
Code SnippetDim LocalXmlString As String = MeuWebService(parametros)Para controlar o Xml use:
Code SnippetDim loNode As XmlNode
Dim loXmlDoc As New XmlDocumment
loXmlDoc.LoadXml(LocalXmlString) 'Adiciona o Xml ou caminho do Xml
loNode = loXmlDoc.SelectSingleNode("//nomeCliente/nrpedido[1]") 'Seleciona o primeiro nó nrpedido
loNode = loXmlDoc.SelectSingleNode("//nomeCliente/nrpedido[2]") 'Seleciona o segundo nó nrpedido
loNode = loXmlDoc.SelectSingleNode("//nomeCliente/nrpedido[3]") 'Seleciona o terceiro nó nrpedido
Dim ValorString As String = loNode.Value 'Adiciona o valor a uma String
loNode = Nothing
loXmlDoc = Nothing
Espero ter ajudado..
- Marcado como Resposta Harley AraujoModerator quarta-feira, 24 de novembro de 2010 20:35
Todas as Respostas
-
Bom dia.
E se nós criarmos um XMLDocument e adicionarmos a ele alguns nós???
Então o valor de cada nós seriam os valores vindo da string. Para capturar os valores, podiamos pegar a string e separá-la pela palavra "<nrpedido>" e capturar todos os caracteres apos essa coincidência, até localizar os caracteres "</" que indicam o termino do nó.
O único problema é que não podemos utilizar o Split para separar e localizar os valores, ou seja, você vai ter que varrer caracter a caractrer e, quando localizar um "<", comece a salvar cada caracter em uma string até que seja localizado o caracter ">".
Vou dar uma brévia em pseudocode:
string xml = "<nomeCliente><nrpedido>999</nrpedido><nomeCliente>";
string palavraChave = "";
string auxValorNo = "";
int valorNo = 0;
XMLDocument = new XMLDocument();
Para todo caracter "C" dentro de "xml" faça
Se "C" == "<" então
palavraChave += "C"
Se palavraChave = "<nrpedido>" então
Enquanto xml.ProximoCaracter <> "<"
auxValorNo += xml.ProximoCaracter
Fim enquanto
valorNo = Convert.Int32( auxValorNo )
XMLDocument.Node.Add("Nome", valorNo)
Fim Se
Fim Se
Fim Para
Algo assim. Entendeu?
Espero ter ajudado, ou pelo menos, dado uma luz.
Abraço -
Code Snippet
Dim xDoc as new System.Xml.XmlDocument()
xDoc.LoadXml(stringDoXml)
Dim node as XmlNode = xDoc.FirstChild //Acessa o primeiro filho
Dim valor as String = node.Value //retorna o valor contido no node
node = node.NextSibling; // Próximo node, ou próximo filho
node = node.PreviousSibling; // Node anterior, ou filho anterior
node = node.ParentNode // Retorna o pai do node
...existem outras diversas propriedades e métodos para navegação
Espero ter ajudado.
Atenciosamente, -
Muito bom, complementando ...
http://msdn2.microsoft.com/en-us/library/system.xml.xmlnode.haschildnodes.aspx
http://www.thescripts.com/forum/thread471305.html
For Each objMenuNode In objmenuItemNodeList
If (checkChildMenuItems(objMenuNode)) Then
Dim objSubMenuNode As System.Xml.XmlNode =
objDoc.CreateNode(System.Xml.XmlNodeType.Element, "subMenu", "")
menuitems = menuItemsArrayList(objMenuNode)
For counter = 0 To menuitems.Count - 1
objSubMenuNode.AppendChild(DirectCast(menuitems(co unter), XmlNode))
Next
objMenuNode.AppendChild(objSubMenuNode)
End If
Next
************************************************** *******************************************
Private Function checkChildMenuItems(ByVal sampleNode As XmlNode) As Integer
Dim returnvalue As Boolean
Dim i As Integer
returnvalue = False
For i = 0 To sampleNode.ChildNodes.Count - 1
If (sampleNode.ChildNodes(i).Name) = "menuItem" Then
returnvalue = True
Exit For
End If
Next
checkChildMenuItems = returnvalue
End Function
************************************************** *********************************************
Private Function menuItemsArrayList(ByVal sampleNode As XmlNode) As
ArrayList
Dim returnvalue As New ArrayList
Dim i As Integer
For i = 0 To sampleNode.ChildNodes.Count - 1
If (sampleNode.ChildNodes(i).Name) = "menuItem" Then
returnvalue.Add(sampleNode.ChildNodes(i))
End If
Next
menuItemsArrayList = returnvalue
End Functionhttp://www.topxml.com/system_xml/system_xml_xmlnodelist.asp
Example (VB.NET): How to retrieve and filter an XMLNodeList using XPath and the XmlDocument.SelectNode method.
In the following example, we retrieve an XMLNodeList using the XMLDocument.SelectNode method. We apply an XPath statement that filters the resulting node list according to criteria based on the parent element name.
Dim objDocument As New System.Xml.XmlDocument
Dim objXmlNodeList As System.Xml.XmlNodeList
Dim objXmlNode As System.Xml.XmlNode
objDocument.LoadXml("<sampleElement1><sampleElement2>We are demonstrating XML nodes.</sampleElement2><sampleElement3>This example uses an XPath expression to filter nodes.</sampleElement3></sampleElement1>")
objXmlNodeList = objDocument.SelectNodes("/sampleElement1/*")
For Each objXmlNode In objXmlNodeList
TextBox1.Text &= objXmlNode.InnerText & CrLf
Next
Example (VB.NET): How to retrieve an XMLNodeList and display properties from its XMLNodes.
In this next example, we use an XMLNodeList to display properties of the list's XMLNode members. We use the XMLNode.ChildNodes property to represent the retrieved nodes, and then display the XMLNode.InnerText, XMLNode.Name, and XMLNode.OuterXml property values.
Dim objDocument As New System.Xml.XmlDocument
Dim objXmlNodeList As System.Xml.XmlNodeList
Dim objXmlNode As System.Xml.XmlNode
objDocument.LoadXml("<sampleElement1><sampleElement2>Sample Value 1</sampleElement2><sampleElement3>Sample Value 2</sampleElement3></sampleElement1>")
objXmlNode = objDocument.DocumentElement
objXmlNodeList = objXmlNode.ChildNodes
For Each objXmlNode In objXmlNodeList
TextBox1.Text &= objXmlNode.Name & CrLf
TextBox1.Text &= "objXmlNode.InnerText = " & objXmlNode.InnerText & CrLf
TextBox1.Text &= "objXmlNode.OuterXml = " & objXmlNode.OuterXml & CrLf
TextBox1.Text &= "objXmlNode.ParentNode.Name = " & objXmlNode.ParentNode.Name & CrLf & CrLf
Next
-
Olá Under,
Para baixar um xml e abstratar ele na aplicação sugiro o seguinte:
dê um Imports pra usar xml na classe que usará o objeto
Code SnippetImports System.XmlDepois Crie uma String para armazenar o caminho do seu Xml, nela você pode chamar o seu webservice que retorna esses valores:
Ex:
Code SnippetDim LocalXmlString As String = MeuWebService(parametros)Para controlar o Xml use:
Code SnippetDim loNode As XmlNode
Dim loXmlDoc As New XmlDocumment
loXmlDoc.LoadXml(LocalXmlString) 'Adiciona o Xml ou caminho do Xml
loNode = loXmlDoc.SelectSingleNode("//nomeCliente/nrpedido[1]") 'Seleciona o primeiro nó nrpedido
loNode = loXmlDoc.SelectSingleNode("//nomeCliente/nrpedido[2]") 'Seleciona o segundo nó nrpedido
loNode = loXmlDoc.SelectSingleNode("//nomeCliente/nrpedido[3]") 'Seleciona o terceiro nó nrpedido
Dim ValorString As String = loNode.Value 'Adiciona o valor a uma String
loNode = Nothing
loXmlDoc = Nothing
Espero ter ajudado..
- Marcado como Resposta Harley AraujoModerator quarta-feira, 24 de novembro de 2010 20:35