Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Attributos fantasmas en nodos XML (https://www.clubdelphi.com/foros/showthread.php?t=40379)

mia 14-02-2007 19:28:52

Attributos fantasmas en nodos XML
 
Hola a tod@s,
(working with BDS 2006 Upg1, XPProf SP2, P4 1GBRAM.)

Tengo problemas con un documento XML que estoy contruyendo.
Hasta ahora nunca habia tenido problemas, pero ahora me esta apareciendo algo un poco raro.
Al ponerle el atributo mslns en el nodo principal del documento, a la que añado más nodos a ese nodo, automaticamente a los nuevos nodos le inserta ese artibuto, aunque en blanco.

Código:
----------------------------------------------------------
Código Delphi [-]
  xmlDoc := TXMLDocument.Create(tblConfig.Owner);
  try
    xmlDoc.Version = '1.0';
    xmlDoc.Active := TRUE;
    xmlElement := xmlDoc.CreateNode('FunctionCallRequest ');
    xmlElement.SetAttribute('xmlns:xsd','String1');
    xmlElement.SetAttribute('xmlns:xsi','String2');
    xmlElement.SetAttribute('xmlns','String3');
    xmlDoc.DocumentElement := xmlElement;
    xmlNode := xmlElement.AddChild('TimeStamp');
    ...
----------------------------------------------------
The result:
-----------------------------------------------------
<FunctionCallRequest xmlns:xsd="String1" xmlns:xsi="String2" xmlns="String3">
<Timestamp xmlns="">
....
---------------------------------------------------
<Timestamp xmlns=""> es el problema, ya que debería ser <TimeStamp>

¿Alguien sabe a que puede ser debido esto?
Muchas gracias.

mia 16-02-2007 11:17:11

Arreglado
 
Hola de nuevo,
Ya está arreglado. Tenia dos problemas. El primero era establecer los parametros de NameSpace de la forma:

Código Delphi [-]
xmlElement.SetAttribute('xmlns:xsd','String1');
xmlElement.SetAttribute('xmlns:xsi','String2');
xmlElement.SetAttribute('xmlns','String3');

cuando se deberia hacer así:

Código Delphi [-]
xmlElement.DeclareNamespace('xsd', 'String1');
xmlElement.DeclareNamespace('xsi', 'String2');
xmlElement.DeclareNamespace('', 'String3');

El siguiente problema era que si se crean nodos "hijos" sobre un elemento (o nodo) de un NameSpace, los nodos hijos se deberian crear en el mismo NameSpace por lo que la creación de los nodos hijos se debería hacer de la siguiente forma:

Código Delphi [-]
var
  xmlDoc: TXMLDocument;
  xmlElement,
  xmlNode,
  xmlNode1 : IXMLNode;
  strNameSpace: string;
begin
  xmlDoc := TXMLDocument.Create(Self.Owner);
  try
    xmlDoc.Active := TRUE;
    xmlDoc.Version := '1.0';
    xmlElement := xmlDoc.CreateNode(xmlTC_FunctionCallRequest);
    xmlElement.DeclareNamespace('xsd', 'myXSD');
    xmlElement.DeclareNamespace('xsi', 'myXSI');
    xmlElement.DeclareNamespace('', 'myNameSpace');
    xmlDoc.DocumentElement := xmlElement;
    // Creación de los nodos "hijos" en el mismo namespace
    xmlNode := xmlElement.AddChild('Nodo_1','myNameSpace');  
    xmlNode1 := xmlElement.AddChild('Nodo_2','myNameSpace');
...

Bueno, al siguiente que le pase ya sabe como resolverlo...
saludos...

juangiron 11-05-2007 01:46:05

Ejemplo
 
hola necesito un ejemplo basico para crear un documento XML en delphi
algo asi

<xml version=''1.0">
<carro>
<placa>aum333<placa/>
<modelo>95<modelo/>
<carro/>


gracias


La franja horaria es GMT +2. Ahora son las 07:50:10.

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