Saludos
Tengo un pequeño proyecto donde necesito poder manejar la información almacenada en un
XML, escribi un sencillo código para ello usando el
XMLDocument y funcionó perfecto, pero sucede que tengo que manejar la inserción y modificación de la información del
XML. Por esa razón decidi buscar otro componente que también me permitiera manejar el
XML y que de paso manejara la inserción y modificación por mi. Para ello me encontré a
ClientDataSet quien necesita un
XMLTransformProvider y de paso puedo asignarle al
DataSource un
DBNavigator. Hasta ahi todo esta bien, cargo el
XML en el
XMLTransformProvider los problemas comienzan cuando activo el
ClientDataSet, este siempre me devuelve el siguiente error
Código:
---------------------------
Error
---------------------------
XML Parse Error:
Reason: XML document must have a top level element.
---------------------------
OK
---------------------------
Sin embargo el código escrito para el uso del
XMLDocument levanta el
XML sin problemas, les dejo el
XML y el código escrito para el
XMLDocument a ver si me pueden ayudar a deshacerme del
"document must have a top level element" que me tiene como loco
XML
Código:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE proyecto [
<!ELEMENT proyecto (trabajador)>
<!ELEMENT trabajador (nombre,empresa,cargo,edad)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT empresa (#PCDATA)>
<!ELEMENT cargo (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
]>
<proyecto>
<trabajador exchange ="1">
<nombre>Luis M</nombre>
<empresa>ESPECH</empresa>
<cargo>Programador Frustrado</cargo>
<edad>26</edad>
</trabajador>
<trabajador exchange ="2">
<nombre>Wilber</nombre>
<empresa>ESPCH</empresa>
<cargo>jefe de asuntos sin importacia</cargo>
<edad>28</edad>
</trabajador>
<trabajador exchange ="3">
<nombre>Paul</nombre>
<empresa>ESPCH</empresa>
<cargo>Secretario del de arriba</cargo>
<edad>27</edad>
</trabajador>
</proyecto>
Código usado para el manejo del XML desde el XMLDocument
Código:
OpenDialog1->Filter = "Lenguaje de Marca Extensible (*.xml)|*.XML";
if (OpenDialog1->Execute())
{
if (OpenDialog1->FileName != "")
{
if (StringGrid1->RowCount != 0)
{
for (int a = 0; a < StringGrid1->RowCount + 1; a++)
{
StringGrid1->Rows[a]->Clear();
}
}
XMLDocument1->FileName = OpenDialog1->FileName;
XMLDocument1->Active = true;
int j = 0;
_di_IXMLNode Main_Node = XMLDocument1->DocumentElement->ChildNodes->GetNode(j);
StringGrid1->ColCount = Main_Node->ChildNodes->Count;
StringGrid1->RowCount = XMLDocument1->DocumentElement->ChildNodes->GetCount() + 1;
for (int k = 0; k < Main_Node->ChildNodes->Count; k++)
{
StringGrid1->Rows[k,0]->Add(Main_Node->ChildNodes->Nodes[k]->NodeName);
}
while (j < XMLDocument1->DocumentElement->ChildNodes->GetCount())
{
Main_Node = XMLDocument1->DocumentElement->ChildNodes->GetNode(j);
for (int i = 0; i < Main_Node->ChildNodes->Count; i++)
{
StringGrid1->Rows[i + 1,j + 1]->Add(Main_Node->ChildNodes->Nodes[i]->NodeValue);
}
j++;
}
}
}
__________________
Nunca esta de más volver a ver la
"Guia de Estilo" o
"La Otra Guia de Estilo". Recuerda siempre usar los
"Tags" para una mejor legibilidad de tu código.
Cuando miras fijamente al abismo, este te devuelve la mirada
oo______ooo_____ooo_ooooooo_____ooo____oooooo____ooooooo______oooo____ooo____oo_
oo______oooo___oooo_oo____oo__oo___oo__oo____oo__oo____oo___oo____oo__oooo___oo_
oo______oo_oo_oo_oo_oo____oo_oo_____oo_oo_____oo_oo____oo__oo______oo_oo_oo__oo_
oo______oo__ooo__oo_oooooo___ooooooooo_oo_____oo_ooooooo___oo______oo_oo__oo_oo_
oo______oo_______oo_oo_______oo_____oo_oo____oo__oo____oo___oo____oo__oo___oooo_
ooooooo_oo_______oo_oo_______oo_____oo_oooooo____oo_____oo____oooo____oo____ooo_
________________________________________________________________________________