我有一个来自第三方的XSD,并且已经使用XML数据绑定工具从中生成类。数据绑定工具不包含前缀,但是我可以分两部分来解决。
n1
的{{1}}参数中添加前缀TagName
会使所有子元素继承任何GetDocBinding
的子元素前缀。例如IXMLNodeCollection
function NewMYDOCUMENT: IXMLMYDOCUMENT;
begin
Result := NewXMLDocument.GetDocBinding('n1:MYDOCUMENT', TXMLMYDOCUMENT, TargetNamespace) as IXMLMYDOCUMENT;
end;
的{{1}}中添加前缀AfterConstruction
两个步骤都完成后,生成的XML符合第三方的要求与XSD匹配,但是我无法遍历IXMLNodeCollection
中的元素。无论子节点有多少,procedure TXMLAllowanceCollection.AfterConstruction;
begin
RegisterChildNode('n1:Allowance', TXMLAllowance);
ItemTag := 'n1:Allowance';
ItemInterface := IXMLAllowance;
inherited;
end;
都会返回0,即使AllowanceCollection
是有效的索引,AllowanceCollection.Count
也会引发异常。
如果我从no中取出两个AllowanceCollection.Allowance[X]
前缀。如图2所示,X
的子节点不具有n1
前缀。如果仅删除其中一个,则会出现AllowanceCollection
异常。在n1
的{{1}}参数中包含任何值均无效。
到目前为止,我不得不求助于完全删除EIntfCastError Interface not supported
前缀并覆盖NamespaceURI
来插入前缀
RegisterChildNode