我已经使用 Delphi 的“XML 数据绑定接口”从 XSD 文件创建 XML 文件,但我未能使其生成遵循所请求结构的输出。
当我使用列表时会发生这种情况。我希望下面的代码能够将其可视化:
...
implementation
var
inv: IXMLInvoiceWood;
const
XMLFile = '../../../TestInvoiceFile.xml';
{$R *.dfm}
procedure setReference(const pmcInv: IXMLInvoiceWood; const pmcAssignedBy, pmcRefName: string);
var
Ref: IXMLInvoiceReference;
begin
ref := pmcInv.InvoiceWoodHeader.InvoiceReference.Add;
ref.SetAttributeNS('AssignedBy','',pmcAssignedBy);
ref.SetAttributeNS('InvoiceReferenceType','',pmcRefName);
ref.Attributes[pmcRefName] := 87532;
end;
procedure TForm2.btn1Click(Sender: TObject);
begin
if inv = nil then
inv := NewInvoiceWood;
begin
inv.OwnerDocument.Encoding := 'utf-8';
inv.OwnerDocument.Options := inv.OwnerDocument.Options - [doAttrNull] + [doAutoSave] + [doNodeAutoIndent] + [doNodeAutoCreate];
inv.InvoiceType := 'Invoice';
inv.InvoiceWoodHeader.InvoiceNumber := '123456789';
SetReference(Inv, 'seller', 'LoadingOrderNo');
Inv.OwnerDocument.SaveToFile(XMLFile);
mmo1.Lines.LoadFromFile(XMLFile);
end;
这会产生以下输出:
<?xml version="1.0" encoding="utf-8"?>
<InvoiceWood InvoiceType="Invoice">
<InvoiceWoodHeader>
<InvoiceNumber>123456789</InvoiceNumber>
<InvoiceReference AssignedBy="seller" InvoiceReferenceType="LoadingOrderNo" LoadingOrderNo="87532"/>
</InvoiceWoodHeader>
</InvoiceWood>
但它应该看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<InvoiceWood InvoiceType="Invoice">
<InvoiceWoodHeader>
<InvoiceNumber>123456789</InvoiceNumber>
<InvoiceReference AssignedBy="Seller" InvoiceReferenceType="LoadingOrderNo">87532</InvoiceReference>
</InvoiceWoodHeader>
</InvoiceWood>
我做错了什么?
如果您希望数字成为
InvoiceReference
节点的文本子级,那么为什么要将其分配给属性?
这一行:
ref.Attributes[pmcRefName] := 87532;
应该是这个:
ref.NodeValue := 87532;
或者:
ref.Text := IntToStr(87532);