Problemas con un XML

28/11/2005 - 13:33 por IbanJBalasch | Informe spam
Buenas, tengo un problema con un XML a ver si alguien me hecha una
mano. Vamos a ello:

(Mas abajo esta el XML). Quiero recuperar el valor del atributo "code",
es decir, el "1000" pero no soy capaz de llegar a él. He probado con:

Dim nNameSpaceDomain As New XmlNamespaceManager(xmlEnvio.NameTable)
nNameSpaceDomain.AddNamespace("epp", "urn:ietf:params:xml:ns:epp-1.0")

opcion 1) xmlnode = xmlDocumento.selectsinglenode("msg",
nNameSpaceDomain)
opcion 2) xmlnode = xmlDocumento.selectsinglenode("/msg",
nNameSpaceDomain)
opcion 3) xmlnode = xmlDocumento.selectsinglenode("//msg",
nNameSpaceDomain)

codigo = xmlnode.attribute(0).innertext

.. y nada. He probado de usar el selectnodes de la siguiente manera:

opcion 1) xmlnodelist = xmlDocumento.selectnodes("//result",
nNameSpaceDomain)
opcion 2) xmlnodelist = xmlDocumento.selectnodes("//msg",
nNameSpaceDomain)

foreach xmlnode in xmlnodelist
codigo = xmlnode.attribute(0).innertext
next


Realmente estoy perdido porque ni debuggando soy capaz de mostrar en la
pantalla de debug el valor "1000" del atributo "code".

XML:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<response>
<result code="1000">
<msg>Operación llevada a cabo con éxito</msg>
</result>
<resData>
<contact:chkData>
<contact:cd>
<contact:id avail="true">XXXX-XXXXX-XX</contact:id>
</contact:cd>
</contact:chkData>
</resData>
<trID>
<clTRID>XX-XXXXX</clTRID>
<svTRID>1126780289343</svTRID>
</trID>
</response>
</epp>


Gracias de antemano por vuestra ayuda y un saludo.

Preguntas similare

Leer las respuestas

#1 carlos
28/11/2005 - 15:57 | Informe spam
HOla Iban prueba con esto.
dim nodo as xmlnode

nodo= xmlDocumento.selectsinglenode("/response/result[@code='1000']")

Espero que te sirva.
Un saludo,
Carlos.
"IbanJBalasch" escribió:

Buenas, tengo un problema con un XML a ver si alguien me hecha una
mano. Vamos a ello:

(Mas abajo esta el XML). Quiero recuperar el valor del atributo "code",
es decir, el "1000" pero no soy capaz de llegar a él. He probado con:

Dim nNameSpaceDomain As New XmlNamespaceManager(xmlEnvio.NameTable)
nNameSpaceDomain.AddNamespace("epp", "urn:ietf:params:xml:ns:epp-1.0")

opcion 1) xmlnode = xmlDocumento.selectsinglenode("msg",
nNameSpaceDomain)
opcion 2) xmlnode = xmlDocumento.selectsinglenode("/msg",
nNameSpaceDomain)
opcion 3) xmlnode = xmlDocumento.selectsinglenode("//msg",
nNameSpaceDomain)

codigo = xmlnode.attribute(0).innertext

... y nada. He probado de usar el selectnodes de la siguiente manera:

opcion 1) xmlnodelist = xmlDocumento.selectnodes("//result",
nNameSpaceDomain)
opcion 2) xmlnodelist = xmlDocumento.selectnodes("//msg",
nNameSpaceDomain)

foreach xmlnode in xmlnodelist
codigo = xmlnode.attribute(0).innertext
next


Realmente estoy perdido porque ni debuggando soy capaz de mostrar en la
pantalla de debug el valor "1000" del atributo "code".

XML:

<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0"
xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
<response>
<result code="1000">
<msg>Operación llevada a cabo con éxito</msg>
</result>
<resData>
<contact:chkData>
<contact:cd>
<contact:id avail="true">XXXX-XXXXX-XX</contact:id>
</contact:cd>
</contact:chkData>
</resData>
<trID>
<clTRID>XX-XXXXX</clTRID>
<svTRID>1126780289343</svTRID>
</trID>
</response>
</epp>


Gracias de antemano por vuestra ayuda y un saludo.


Respuesta Responder a este mensaje
#2 IbanJBalasch
28/11/2005 - 16:28 | Informe spam
Hola Carlos,

Primero de todo gracias por tu rapida respuesta, respecto a lo que me
comentas he probado tu código y varias combinaciones relativas a esta
y nada, el objeto nodo sigue vacio:

* Con namespace

Dim xmlNode01 as xmlNode
Dim nNameSpaceDomain As New
XmlNamespaceManager(xmlEnvio.NameTable)

nNameSpaceDomain.AddNamespace("epp",
"urn:ietf:params:xml:ns:epp-1.0")

xmlNode01 xmlEnvio.SelectSingleNode("//response/result[@code='1000']",
nNameSpaceDomain)
xmlNode01 xmlEnvio.SelectSingleNode("/response/result[@code='1000']",
nNameSpaceDomain)
xmlNode01 xmlEnvio.SelectSingleNode("//result[@code='1000']", nNameSpaceDomain)

* Sin namespace

Dim xmlNode01 as xmlNode

xmlNode01 xmlEnvio.SelectSingleNode("//response/result[@code='1000']")
xmlNode01 xmlEnvio.SelectSingleNode("/response/result[@code='1000']")
xmlNode01 xmlEnvio.SelectSingleNode("//result[@code='1000']")

Llevo desde el viernes probando las mas rockambolescas formas de
acceder (y modificar) al contenido del atributo "code" y al "innertext"
de "msg" sin exito. Encima son de las tipicas situaciones en que solo
te falta "esto" para acabar con todo. ^_^ pura impotencia

Un saludo
Respuesta Responder a este mensaje
#3 IbanJBalasch
28/11/2005 - 16:53 | Informe spam
Vale, solucionado. El problema consistia que moviendome con
"selectSingleNode" o "selectNodes" me era imposible acceder al
contenido, probando probando al final he conseguido ver y editar el
contenido con lo siguiente:

xmlDocumento.DocumentElement.ChildNodes(0).ChildNodes(0).Attributes(0).Name
Resultado: "code"

xmlDocumento.DocumentElement.ChildNodes(0).ChildNodes(0).Attributes(0).Value
Resultado = "1000"

Y la asignación seria como sigue:

xmlDocumento.DocumentElement.ChildNodes(0).ChildNodes(0).Attributes(0).InnerText
= "nuevo valor"

Para el caso de "msg" tendre que "bajar" un "childnode" mas. Al final
por pesadez lo he conseguido, pero no rinde haber perdido todo este
tiempo por una tonteria asi :-(

Gracias por todo y un saludo Carlos
Respuesta Responder a este mensaje
#4 Tristan
30/11/2005 - 19:16 | Informe spam
Bueno creo que ya lo tienes resuelto "manualmente", perdona por no haber
podido contestarte antes.

De todas formas, yo creo que deberías haberlo hecho así:

Dim nsmgr As New XmlNamespaceManager(xmlDocumento.NameTable)
nsmgr.AddNamespace("epp", "urn:ietf:params:xml:ns:epp-1.0")
dim nodo as XmlNode = xmlDocumento.SelectSingleNode("//epp:result", nsmgr)
msgbox(nodo.Attributes("code").Value)
nodo.Attributes("code").Value = 1500

O con ruta absoluta:
dim nodo as XmlNode =
xmlDocumento.SelectSingleNode(/epp:epp/epp:response/epp:result", nsmgr)


Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#5 IbanJBalasch
01/12/2005 - 09:50 | Informe spam
Tristan wrote:

Dim nsmgr As New XmlNamespaceManager(xmlDocumento.NameTable)
nsmgr.AddNamespace("epp", "urn:ietf:params:xml:ns:epp-1.0")
dim nodo as XmlNode = xmlDocumento.SelectSingleNode("//epp:result", nsmgr)
msgbox(nodo.Attributes("code").Value)
nodo.Attributes("code").Value = 1500





Funciona perfectamente con este ejemplo que me has facilitado, ademas
de que mucho mas "limpio" (ya lo he implementado ^_^). Lo que
desconocia es que, ademas de especificar el namespace, debia de ponerle
el prefijo delante del nodo que buscaba, en este caso el "epp"
("//epp:result"), no me habia sucedido antes con los nodos que buscaba
aun estando siempre trabajando con namespaces.

Gracias y un saludo Juan Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida