xml - seleccion - que comandos de html en dreamweaver
¿Cómo buscar y reemplazar un valor de etiqueta en un archivo xml usando Delphi? (2)
¿Cómo buscar y reemplazar un valor de etiqueta en un archivo XML usando Delphi?
Sé lo que es la etiqueta XML, pero el valor es aleatorio y simplemente debe restablecerse a un valor predeterminado, por lo que en realidad no puedo / no debo buscar el valor sino solo la etiqueta. También sé la ubicación del archivo / archivos.
Soy nuevo en Delphi, ¿alguien puede darme un ejemplo simple de cómo se puede hacer esto?
Gracias de antemano.
La mejor posibilidad es usar un analizador XML , por ejemplo:
- http://www.icom-dv.de/products/xml_tools/uk_xml_parser_01.php3
- http://www.omnixml.com/
- http://www.destructor.de/xmlparser/index.htm
- http://www.simdesign.nl/xml.html
- ... muchos más, solo Google ;-)
Si se trata de un archivo XML bastante pequeño, también podría simplemente cargar el XML en una cadena (lista) y usar una expresión regular :
var
Regex: TPerlRegEx;
Regex := TPerlRegEx.Create(nil);
Regex.RegEx := ''<yourtag>.*?</yourtag>'';
Result := objRegEx.Replace(inputString, replacementString, true);
Puede obtener el componente TPerlRegex aquí .
La tercera forma incluiría hacer todo el trabajo sucio a mano , usando pos , delete e insert . Tendría que encontrar las dos posiciones de la etiqueta de apertura y finalización y la posición de> para la etiqueta de apertura), eliminar la cadena entre esos dos índices e insertar su valor predeterminado después (y debería iterar sobre todas las coincidencias si hay más de una ocurrencia). No de la manera que preferiría ;-)
IXMLDocument
el archivo XML usando IXMLDocument
de IXMLDocument
y usaría el documento para reemplazar el elemento. Algo como esto:
uses
XMLDoc,
XMLIntf;
procedure ChangeTag(const filename : String);
var
doc : IXMLDocument;
parent : IXMLNode;
toReplace : IXMLNode;
replacement : IXMLNode;
begin
doc := LoadXMLDocument(filename);
parent := doc.DocumentElement.ChildNodes.FindNode(''parent'');
toReplace := parent.ChildNodes.FindNode(''toReplace'');
replacement := doc.CreateElement(''replacement'', '''');
replacement.Text := toReplace.Text;
parent.ChildNodes.ReplaceNode(toReplace, replacement);
doc.SaveToFile(filename);
end;