XMLDocument节点没有值

时间:2016-07-27 14:11:17

标签: xml delphi xsd

当我使用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;

这是结果

  

找到节点
  ID

     

1

原始问题:

我从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文件呢?

2 个答案:

答案 0 :(得分:0)

根据DOM level 1 specificationnodeValue在元素节点上返回 null

  

包含nodeName,nodeValue和attributes属性作为获取节点信息而不转换为特定派生接口的机制。如果特定nodeType没有明显的这些属性映射(例如,Element的nodeValue或Comment的属性),则返回null。

我建议导航到此元素节点的子文本节点,然后在此文本节点上调用nodeValue

答案 1 :(得分:0)

XMLDocument不会正确处理命名空间,所以我不得不调整XML文件并删除命名空间。

<cbc:ID>TOSL108</cbc:ID>

成了

<ID>TOSL108</ID>

现在它有效。