Problemas con XPathNodeIterator

23/05/2005 - 19:14 por Anonimo | Informe spam
Que tal Grupo,

Tengo un archivo XML de Municipios con la siguiente
estructura:

<MunicipioList xmlns:bk="urn:samples">
<MunicipioElement>
<MunicipioID>0</MunicipioID>
<EstadoID>0</EstadoID>
<Nombre>NO APLICA</Nombre>
<TasaIVA>0.1500</TasaIVA>
<StatusID>1</StatusID>
<FechaUltimaModificacion>2005-05-
17T10:37:43.8770000-05:00</FechaUltimaModificacion>
</MunicipioElement>
<MunicipioElement>
<MunicipioID>5</MunicipioID>
<EstadoID>28</EstadoID>
<Nombre>ABASOLO</Nombre>
<TasaIVA>0.1500</TasaIVA>
<StatusID>1</StatusID>
<FechaUltimaModificacion>2005-05-
17T10:37:43.9230000-05:00</FechaUltimaModificacion>
</MunicipioElement>
...
</MunicipioList>

El detalle es que quiero obtener todos los Municipios que
correspondan
con un EstadoID correspondiente, y este es el codigo:

private void btnLeerBooks_Click(object sender,
System.EventArgs e)
{

string EstadoID = "28";

XPathDocument doc = new XPathDocument(Server.MapPath
(@"EsquemasXMLCatalogos\Municipios.xml"));
XPathNavigator nav = doc.CreateNavigator();


XPathExpression expr;
expr = nav.Compile("descendant::MunicipioElement
[EstadoID=" + EstadoID + "]");


expr.AddSort("Nombre", XmlSortOrder.Ascending,
XmlCaseOrder.None, "", XmlDataType.Text);


XPathNodeIterator iterator = nav.Select(expr);
while (iterator.MoveNext())
{
XPathNavigator nav2 = iterator.Current.Clone();

Response.Write(nav2.Value);
}

}

y todo bien, sinembargo, el value me trae el resultado en
el siguiente formato:

528ABASOLO0.150012005-05-17T10:37:43.9230000-05:00

y yo quiero obtener el valor del "MunicipioID", y
el "Nombre" en campos separados
por que quiero llenar un combo, y asignarle en sus campos
ValueField y TextField
el valor correspondiente, solo que no he logrado separar
ese valor.

Alguna sugerencia de como lograr esto ?¿

De antemano gracias.

Saludos
 

Leer las respuestas

#1 Octavio Telis Aynés
23/05/2005 - 23:43 | Informe spam
Mira... para dar solución a tu problema, no se si te parezca una buena
opcion, te pego este listado de código para que lo evalues.

string EstadoID = "28";

DataSet ds =new DataSet();
DataRow[] drs;
ds.ReadXml(Server.MapPath(@"EsquemasXMLCatalogos\Municipios.xml"));

drs = ds.Tables[0].Select("EstadoID = " + EstadoID);

foreach( DataRow dr in drs)
{
Response.Write ((dr["MunicipioID"].ToString() + " - " +
dr["Nombre"].ToString() ));
}


Uso un DataSet para transformar el XML a un DataTable, afortunadamente el
XML que pones de ejemplo es transformable sin problemas. He hecho pruebas y
funciona bien hasta donde pones.

Podrías hacer algo así... si es que te conviene, espero sea una solución...


Saludos...

Octavio Telis Aynés
http://otelis.blogspot.com


escribió en el mensaje
news:165701c55fba$d8d23de0$

Que tal Grupo,

Tengo un archivo XML de Municipios con la siguiente
estructura:

<MunicipioList xmlns:bk="urn:samples">
<MunicipioElement>
<MunicipioID>0</MunicipioID>
<EstadoID>0</EstadoID>
<Nombre>NO APLICA</Nombre>
<TasaIVA>0.1500</TasaIVA>
<StatusID>1</StatusID>
<FechaUltimaModificacion>2005-05-
17T10:37:43.8770000-05:00</FechaUltimaModificacion>
</MunicipioElement>
<MunicipioElement>
<MunicipioID>5</MunicipioID>
<EstadoID>28</EstadoID>
<Nombre>ABASOLO</Nombre>
<TasaIVA>0.1500</TasaIVA>
<StatusID>1</StatusID>
<FechaUltimaModificacion>2005-05-
17T10:37:43.9230000-05:00</FechaUltimaModificacion>
</MunicipioElement>
...
</MunicipioList>

El detalle es que quiero obtener todos los Municipios que
correspondan
con un EstadoID correspondiente, y este es el codigo:

private void btnLeerBooks_Click(object sender,
System.EventArgs e)
{

string EstadoID = "28";

XPathDocument doc = new
XPathDocument(Server.MapPath(@"EsquemasXMLCatalogos\Municipios.xml"));
XPathNavigator nav = doc.CreateNavigator();


XPathExpression expr;
expr = nav.Compile("descendant::MunicipioElement
[EstadoID=" + EstadoID + "]");


expr.AddSort("Nombre", XmlSortOrder.Ascending,
XmlCaseOrder.None, "", XmlDataType.Text);


XPathNodeIterator iterator = nav.Select(expr);
while (iterator.MoveNext())
{
XPathNavigator nav2 = iterator.Current.Clone();

Response.Write(nav2.Value);
}

}

y todo bien, sinembargo, el value me trae el resultado en
el siguiente formato:

528ABASOLO0.150012005-05-17T10:37:43.9230000-05:00

y yo quiero obtener el valor del "MunicipioID", y
el "Nombre" en campos separados
por que quiero llenar un combo, y asignarle en sus campos
ValueField y TextField
el valor correspondiente, solo que no he logrado separar
ese valor.

Alguna sugerencia de como lograr esto ?¿

De antemano gracias.

Saludos

Preguntas similares