gpt4 book ai didi

xml - 消除xml文件的声明

转载 作者:行者123 更新时间:2023-12-03 19:24:07 25 4
gpt4 key购买 nike

我正在 Delphi 7 中创建一个 XML 文件。我想从代码中删除父节点的声明。

这是我的代码:

var
XML : IXMLDOCUMENT;
RootNode, CurNode : IXMLNODE;
begin
XML := NewXMLDocument;
XML.Encoding := 'utf-8';
XML.Options := [doNodeAutoIndent]; // looks better in Editor ;)
RootNode := XML.AddChild('p:test');
RootNode.Attributes['xmlns:ds'] := 'Attributes1';
RootNode.Attributes['xmlns:p'] := 'Attributes2';
RootNode.Attributes['versione'] := 'FPR12';

CurNode := RootNode.AddChild('HeadNode');

CurNode := CurNode.AddChild('SubNode');
CurNode.Text := 'Test';
CurNode := CurNode.ParentNode;

CurNode := CurNode.AddChild('Codice');
CurNode.Text := '01234567890';
CurNode := CurNode.ParentNode;

CurNode := CurNode.ParentNode;

s := 'C:\Users\web\Desktop\file.xml';
XMl.SaveToFile(s);
end;

这是我的结果:

<?xml version="1.0" encoding="utf-8"?>
<p:test xmlns:ds="Attributes1" xmlns:p="Attributes2" versione="FPR12">
<p:HeadNode>
<p:SubNode>Test</p:SubNode>
<p:Codice>01234567890</p:Codice>
</p:HeadNode>
</p:test>

这是我所期望的(注意 HeadNode 及其嵌套节点上缺少的“p:”):

<?xml version="1.0" encoding="utf-8"?>
<p:test xmlns:ds="Attributes1" xmlns:p="Attributes2" versione="FPR12">
<HeadNode>
<SubNode>Test</SubNode>
<Codice>01234567890</Codice>
</HeadNode>
</p:test>

我怎样才能得到这个?

最佳答案

这是正常行为,在父节点下创建的任何节点都会携带父节点的命名空间。由于您希望节点 HeadNode 不带有 namespace ,因此您必须在创建该节点时分配一个空 namespace 。如果您查看函数 TXMLNode.AddChild ,您将看到有一个重载函数接受代表该节点的 NameSpaceUri 的第二个参数。
因此,要修复您的 XML,您只需将 CurNode := RootNode.AddChild('HeadNode'); 行更改为 CurNode := RootNode.AddChild('HeadNode', '');
可编译示例:

program SO58008911;

{$APPTYPE CONSOLE}

{$R *.res}

uses
ActiveX,
XMLIntf,
XMLDoc,
System.SysUtils;

procedure TestXML;
var
XML : IXMLDOCUMENT;
RootNode, CurNode : IXMLNODE;
begin
XML := NewXMLDocument;
XML.Encoding := 'utf-8';
XML.Options := [doNodeAutoIndent]; // looks better in Editor ;)
RootNode := XML.AddChild('p:test');
RootNode.Attributes['xmlns:ds'] := 'Attributes1';
RootNode.Attributes['xmlns:p'] := 'Attributes2';
RootNode.Attributes['versione'] := 'FPR12';
CurNode := RootNode.AddChild('HeadNode', '');
CurNode := CurNode.AddChild('SubNode');
CurNode.Text := 'Test';
CurNode := CurNode.ParentNode;
CurNode := CurNode.AddChild('Codice');
CurNode.Text := '01234567890';
Writeln(XML.XML.Text);
end;

begin
try
CoInitialize(nil);
try
TestXML;
finally
CoUninitialize;
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.

输出:
<?xml version="1.0"?>
<p:test xmlns:ds="Attributes1" xmlns:p="Attributes2" versione="FPR12">
<HeadNode>
<SubNode>Test</SubNode>
<Codice>01234567890</Codice>
</HeadNode>
</p:test>

关于xml - 消除xml文件的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58008911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com