Delphi 的“XML 数据绑定接口”功能在“列表项”上无法按预期工作

问题描述 投票:0回答:1

我已经使用 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>

我做错了什么?

xml delphi data-binding
1个回答
0
投票

如果您希望数字成为

InvoiceReference
节点的文本子级,那么为什么要将其分配给属性?

这一行:

ref.Attributes[pmcRefName] := 87532;

应该是这个:

ref.NodeValue := 87532;

或者:

ref.Text := IntToStr(87532);
© www.soinside.com 2019 - 2024. All rights reserved.