Foros del Web » Programación para mayores de 30 ;) » .NET »

Expresion xpath: ¿bug .Net?

Estas en el tema de Expresion xpath: ¿bug .Net? en el foro de .NET en Foros del Web. Hola a todos. Tengo la siguiente expresion: "//connectionString[@name='sserver_sql_constr']//parameter[@name='database']/@value" y el siguiente archivo de configuracion @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código xml: Ver original <?xml version = "1.0" encoding ...
  #1 (permalink)  
Antiguo 26/05/2009, 09:38
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Expresion xpath: ¿bug .Net?

Hola a todos. Tengo la siguiente expresion:

"//connectionString[@name='sserver_sql_constr']//parameter[@name='database']/@value"

y el siguiente archivo de configuracion

Código xml:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <dataConfiguration>
  3.   <xmlSerializerSection type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null">
  4.     <enterpriseLibrary.databaseSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" defaultInstance="sserver_sql" xmlns="http://www.microsoft.com/practices/enterpriselibrary/08-31-2004/data">
  5.       <databaseTypes>
  6.         <databaseType name="Oracle" type="Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleDatabase, Microsoft.Practices.EnterpriseLibrary.Data, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null" />
  7.         <databaseType name="Sql Server" type="Microsoft.Practices.EnterpriseLibrary.Data.Sql.SqlDatabase, Microsoft.Practices.EnterpriseLibrary.Data, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null" />
  8.       </databaseTypes>
  9.       <instances>
  10.         <instance name="sserver_orcl" type="Oracle" connectionString="sserver_orcl_constr" />
  11.         <instance name="sserver_sql" type="Sql Server" connectionString="sserver_sql_constr" />
  12.       </instances>
  13.       <connectionStrings>
  14.         <connectionString xsi:type="OracleConnectionStringData" name="sserver_orcl_constr">
  15.           <parameters>
  16.             <parameter name="server" value="develope" isSensitive="false" />
  17.             <parameter name="User Id" value="signaserver" isSensitive="false" />
  18.             <parameter name="password" value="signaserver" isSensitive="false" />
  19.           </parameters>
  20.         </connectionString>
  21.         <connectionString name="sserver_sql_constr">
  22.           <parameters>
  23.             <parameter name="database" value="sserver" isSensitive="false" />
  24.             <parameter name="Integrated Security" value="False" isSensitive="false" />
  25.             <parameter name="password" value="signature_server" isSensitive="true" />
  26.             <parameter name="User Id" value="signature" isSensitive="false" />
  27.             <parameter name="server" value="localhost" isSensitive="false" />
  28.           </parameters>
  29.         </connectionString>
  30.       </connectionStrings>
  31.     </enterpriseLibrary.databaseSettings>
  32.   </xmlSerializerSection>
  33. </dataConfiguration>

La idea es obtener todos los atributos con nombre value que pertenezcan a la seccion connectionString con su atributo name igual a sserver_sql_constr.
En esta pagina http://www.whitebeam.org/library/gui...thtestbed.rhtm hago un test y la expresion me trae los resultados que espero. Pero en mi aplicacion, luego de ejecutar el codigo que muestro debajo, la consulta no me arroja ningun resultado:

Código c#:
Ver original
  1. const string expr = "//connectionString[@name='sserver_sql_constr']//parameter[@name='database']/@value";
  2.             XmlDocument doc = new XmlDocument();
  3.             XPathNavigator nav;
  4.             doc.Load("C:\\Documents And Settings\\Mariano\\Escritorio\\Test\\cnfg\\signature.server.data.config");
  5.             Context.Show(doc.InnerXml);          
  6.             nav = doc.CreateNavigator();
  7.             Context.Show(nav.Select(expr).Count.ToString());

Si se fijan en el archivo xml, existe un elemento que se llama enterpriseLibrary.databaseSettings. Si agrego nodos antes de este, y realizo consultas similares a la que necesito, entonces me funciona. Pero si los nodos que estoy buscando se encuentran debajo de este elemento, me deja de funcionar y ya no me trae ningun resultado.
No se como funciona internamente xpath, la verdad es que no tengo mucha experiencia en esto, supongo que ¿puede llegar a existir un problema con el '.' en el nombre del elemento?. Si saco este '.' para probar si este es el problema, el documento xml no se carga completo, ya que esta validado por un esquema.
Estoy usando Visual Studio 2005. La version del framework es 2.0.50727.
Gracias de antemano.
Saludos.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 26/05/2009, 09:52
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Respuesta: Expresion xpath: ¿bug .Net?

Tiene problemas con este atributo del elemento enterpriseLibrary.databaseSettings:

xmlns="http://www.microsoft.com/practices/enterpriselibrary/08-31-2004/data"

Es el ultimo atributo del elemento. Si lo remuevo, la consulta me trae los nodos que se esperan.
Ni idea por que el error.
Si alguien se da alguna idea, que la comente.
Gracias de nuevo.
Saludos.
__________________
Add, never Remove
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:08.