• Sábado 21 de Diciembre de 2024, 13:27

Autor Tema:  Algun Motivo Para Que No Siempre Agregue Xsi:nil  (Leído 1413 veces)

xcx

  • Miembro MUY activo
  • ***
  • Mensajes: 175
  • Nacionalidad: cl
    • Ver Perfil
    • Fotos y captura
Algun Motivo Para Que No Siempre Agregue Xsi:nil
« en: Jueves 19 de Octubre de 2006, 17:13 »
0
Hola, tengo el siguiente problema, estoy generando un documento xml en base a un esquema que me entregaron con xmldocument, y algunos atributos estan definidos como nillable, por lo cual solamente insertaba un xsi:nil="true", hasta ahí todo bien en otros proyectos anteriores, pero en el de ahora es diferente.. además de existir este atributo, tambien hay otros atributos que se deben completar debido a que son requeridos, son booleanos, por lo que no hay problema, solo agrego un si o un no.
el problema es cuando existen más elementos o nodos.
Aquí les muestro un fragmento del xml en cuestión.

Código: Text
  1.  
  2. ...
  3. ...
  4. <CodCarrera>7444</CodCarrera>
  5.     <Anio>2006</Anio>
  6.     <PSU Requisito="Si">
  7.       <Exige_Puntaje_Minimo Puntaje_Minimo="No" />
  8.       <Prueba_Obligatoria_Lenguaje Ponderacion="20">No</Prueba_Obligatoria_Lenguaje>
  9.       <Prueba_Obligatoria_Matematicas Ponderacion="25">No</Prueba_Obligatoria_Matematicas>
  10.       <Prueba_Optativa_Ciencias_Sociales Ponderacion="30">No</Prueba_Optativa_Ciencias_Sociales>
  11.       <Prueba_Optativa_Ciencias Ponderacion="0">No</Prueba_Optativa_Ciencias>
  12.       <NEM Ponderacion="25">No</NEM>
  13.       <Entrevista_Personal Ponderacion="0">No</Entrevista_Personal>
  14.       <Entrevista_Psicologica Ponderacion="0">No</Entrevista_Psicologica>
  15.       <Test_Psicologico Ponderacion="0" Valor="0" Valor_Expresado="$">No</Test_Psicologico>
  16.       <Prueba_Especial Ponderacion="0" Valor="0" Valor_Expresado="$">No</Prueba_Especial>
  17.       <Examen_Admicion Ponderacion="0">No</Examen_Admicion>
  18.       <Requiere_Experiencia_Laboral Observacion="No" xsi:nil="true" />
  19.     </PSU>
  20. ...
  21. ...
  22.  
  23.  
Si se dan cuenta, el nodo "Exige_Puntaje_Minimo" no lleva xsi:nil="true", pero sin embargo esta definido en el esquema y cuando lo agrego, me he dado cuenta que solo lo agrega en el último nodo...
En el comienzo del xml declaro esto para utilizarlo más abajo.
Código: Text
  1.  
  2.  Dim nilAttribute As XmlAttribute = xmlDocCarr.CreateAttribute("xsi", "nil", "http://www.w3.org/2001/XMLSchema-instance")
  3.         nilAttribute.Value = "true"
  4.  
  5.  
entonces cuando encuentro que un valor no contiene datos lo agrego
Código: Text
  1.  
  2. ...
  3. nodo3 = xmlDocCarr.CreateElement("Exige_Puntaje_Minimo")
  4.                     'Atributo Puntaje_Minimo Si/No
  5.                     nodo3.Attributes.Append(xmlDocCarr.CreateAttribute("Puntaje_Minimo"))
  6.                     If Not (.Rows(i).Item("puntMinimo") Is DBNull.Value) Then
  7.                         If (.Rows(i).Item("puntMinimo") = 1) Then
  8.                             nodo3.Attributes("Puntaje_Minimo").Value = "Si"
  9.                             If Not (.Rows(i).Item("puntMinimo") Is DBNull.Value) Then
  10.                                 nodo3.InnerText = .Rows(i).Item("puntMinimo")
  11.                             Else
  12.                                 nodo3.Attributes.Append(nilAttribute)
  13.                                 nodo2.AppendChild(nodo3)
  14.                             End If
  15.                         Else
  16.                             nodo3.Attributes.Append(nilAttribute)
  17.                             nodo3.Attributes("Puntaje_Minimo").Value = "No"
  18.                         End If
  19.                     Else
  20.                         nodo3.Attributes.Append(nilAttribute)
  21.                         nodo3.Attributes("Puntaje_Minimo").Value = "No"
  22.                     End If
  23.                     nodo2.AppendChild(nodo3)
  24. ...
  25.  
  26.  
Alguna idea o sugerencia? o lo estoy apilcando mal? he buscado info pero no he encontrado algo específico a mi problema, solo documentación de porque se implementa y de como nacio, pero no algo de porque me lo agrega en el último nodo y no cuando yo quiero. Cabe destacar que si lo agrego a mano (el xsi:nil...) el xmlspy me lo reconoce sin problemas y la validación es correcta..
Agradesco cualquier ayuda.. te antemano gracias...

xcx

  • Miembro MUY activo
  • ***
  • Mensajes: 175
  • Nacionalidad: cl
    • Ver Perfil
    • Fotos y captura
Re: Algun Motivo Para Que No Siempre Agregue Xsi:nil
« Respuesta #1 en: Jueves 19 de Octubre de 2006, 20:38 »
0
Bueno, al final lo logré resolver de la siguiente forma...
En cada línea donde tenía el nodox.Attributes.Append(nilAttribute)
lo cambie a esto
Código: Text
  1.  
  2.  nodox.Attributes.Append(xmlDocCarr.CreateAttribute("xsi", "nil", http://www.w3.org/2001/XMLSchema-instance"))
  3. nodox.Attributes("xsi:nil").Value = "true"
  4.  
  5.  
Y ahora si funciona, y me muestra el xml como lo define el esquema que me pasaron... No se si sea la mejor forma, dejo la inquietud por si alguien se maneja mejor en el tema. de ante mano gracias..  :smartass:

[Edit]
Sorry si es que el moderador de esta sección lo considera spam por haber posteado 2 veces, la verdad es que cuando postee la solución que encontre ni me acordé de las reglas de los foros.. (Digamos que estaba muy desesperado viendo como solucionaba este problema) :hola: