Delphi x XMLNode.NodeType
Bom Dia
Fiz uma função que está lendo um arquivo XML em um TreeView.
Ela começa com
if XMLNode.NodeType <> ntElement then
Exit;
Mas a função já começa errado pois o XMLNode.NodeType = ntDocument
Ao salvar o XML eu uso
XML.SaveToFile('C:\Exemplo.xml');
Alguma dica?
Grato
Fiz uma função que está lendo um arquivo XML em um TreeView.
Ela começa com
if XMLNode.NodeType <> ntElement then
Exit;
Mas a função já começa errado pois o XMLNode.NodeType = ntDocument
Ao salvar o XML eu uso
XML.SaveToFile('C:\Exemplo.xml');
Alguma dica?
Grato
Alessandro Yamasaki
Curtidas 0
Respostas
Tiago Rizzon
24/07/2015
Bom dia!
manda o arquivo XML
e mais detalhes doq vc precisa processar neste arquivo.
Abraço!
manda o arquivo XML
e mais detalhes doq vc precisa processar neste arquivo.
Abraço!
GOSTEI 0
Alessandro Yamasaki
24/07/2015
Solução
// Monta a estrutura em árvore dentro do TreeView
GenereteTree(XMLNode: IXMLNode;
TreeNode: TTreeNode; TreeView: TTreeView );
var
liCont: Integer;
ltNewTreeNode : TTreeNode;
lsNodeText: string;
lxAttrNode: IXMLNode;
begin
lsNodeText := XmlNode.NodeName;
if XmlNode.IsTextElement then
begin
lsNodeText := lsNodeText + ' = ' + XmlNode.NodeValue;
end;
if (xmlNode.AttributeNodes.Count > 0) or XmlNode.HasChildNodes then
begin
ltNewTreeNode := TreeView.Items.AddChild(TreeNode, lsNodeText);
end;
// Add attributos
for liCont := 0 to xmlNode.AttributeNodes.Count - 1 do
begin
lxAttrNode := xmlNode.AttributeNodes.Nodes[liCont];
TreeView.Items.AddChild(ltNewTreeNode,
'[' + lxAttrNode.NodeName + ' = "' + lxAttrNode.Text + '"]');
end;
// Add cada filho
if XmlNode.HasChildNodes then
begin
for liCont := 0 to xmlNode.ChildNodes.Count - 1 do
begin
GenereteTree(XMLNode.ChildNodes[liCont], ltNewTreeNode, TreeView);
end;
end;
end;
// Monta a estrutura em árvore dentro do TreeView
GenereteTree(XMLNode: IXMLNode;
TreeNode: TTreeNode; TreeView: TTreeView );
var
liCont: Integer;
ltNewTreeNode : TTreeNode;
lsNodeText: string;
lxAttrNode: IXMLNode;
begin
lsNodeText := XmlNode.NodeName;
if XmlNode.IsTextElement then
begin
lsNodeText := lsNodeText + ' = ' + XmlNode.NodeValue;
end;
if (xmlNode.AttributeNodes.Count > 0) or XmlNode.HasChildNodes then
begin
ltNewTreeNode := TreeView.Items.AddChild(TreeNode, lsNodeText);
end;
// Add attributos
for liCont := 0 to xmlNode.AttributeNodes.Count - 1 do
begin
lxAttrNode := xmlNode.AttributeNodes.Nodes[liCont];
TreeView.Items.AddChild(ltNewTreeNode,
'[' + lxAttrNode.NodeName + ' = "' + lxAttrNode.Text + '"]');
end;
// Add cada filho
if XmlNode.HasChildNodes then
begin
for liCont := 0 to xmlNode.ChildNodes.Count - 1 do
begin
GenereteTree(XMLNode.ChildNodes[liCont], ltNewTreeNode, TreeView);
end;
end;
end;
GOSTEI 0