Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Error usando ClientDataSet y XMLTransformProvider - ...must have a top level element (https://www.clubdelphi.com/foros/showthread.php?t=78290)

lmpadron 05-04-2012 20:51:37

Error usando ClientDataSet y XMLTransformProvider - ...must have a top level element
 
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 :mad::mad::mad:

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++;
                }
          }
        }


maeyanes 09-04-2012 21:32:42

Hola...

Algo me dice que la parte:

Código:

<!DOCTYPE proyecto [
<!ELEMENT proyecto (trabajador)>
<!ELEMENT trabajador (nombre,empresa,cargo,edad)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT empresa (#PCDATA)>
<!ELEMENT cargo (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
]>

en tu XML es la que te está produciendo el problema. Has una prueba eliminando esa parte del archivo y trata de cargarlo de nuevo en el XMLTransformProvider.


Saludos...


La franja horaria es GMT +2. Ahora son las 12:51:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi