当我使用TXMLDocument加载XML时,元素不包含任何值。我使用元素<cbc:ID>TOSL108</cbc:ID>
阅读以下example file,它确实找到了节点,但它没有将其识别为文本元素,并且值为空且没有子元素。 / p>
aNode := XMLDocument1.ChildNodes.Last.ChildNodes.Nodes['ID'];
if Assigned(aNode) then begin
MEMOInfo.Lines.Add('Node is found');
MEMOInfo.Lines.Add( anode.DOMNode.nodeName);
MEMOInfo.Lines.Add( anode.DOMNode.nodeValue);
MEMOInfo.Lines.Add( inttostr(anode.DOMNode.nodetype));
end;
这是结果
找到节点
ID1
原始问题:
我从xsd创建了一个XML数据绑定。即UBL-Invoice-2.1.xsd。我按照this教程。
然后我使用this教程打开example发票文件。并且文件将加载到界面中。
var
Invoice:IXMLInvoiceType;
begin
try
invoice := LoadInvoice('invoice-exameple.xml');
except
on e:exception do begin
MEMO.Lines.Add(e.Message);
end;
end;
end;
现在我不知道如何访问节点,例如<cbc:ID>TOSL108</cbc:ID>
我会尝试访问其文本字段,但它是空的。
MEMO.Lines.Add('Factuurnummer : '+ invoice.ID.Text);
问:所有元素都是空的,那么如何阅读此XML文件呢?
答案 0 :(得分:0)
根据DOM level 1 specification,nodeValue
在元素节点上返回 null :
包含nodeName,nodeValue和attributes属性作为获取节点信息而不转换为特定派生接口的机制。如果特定nodeType没有明显的这些属性映射(例如,Element的nodeValue或Comment的属性),则返回null。
我建议导航到此元素节点的子文本节点,然后在此文本节点上调用nodeValue
。
答案 1 :(得分:0)
XMLDocument不会正确处理命名空间,所以我不得不调整XML文件并删除命名空间。
<cbc:ID>TOSL108</cbc:ID>
成了
<ID>TOSL108</ID>
现在它有效。