2016-07-27 6 views
2

TXMLDocumentでXMLを読み込むと、その要素には値はありません。私は次のexample fileを要素<cbc:ID>TOSL108</cbc:ID>で読んでいますが、ノードを見つけますが、それをテキスト要素として認識せず、値は空であり、子要素はありません。XMLDocumentノードに値がありません

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であるオリジナル質問

:私は、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); 

Q:すべての要素が空になっているので、どのように私はこのXMLファイルを読みますか。

+0

エラーメッセージはなく、オブジェクトは単に空です... –

+0

はい、エラーメッセージは表示されず、すべてのプロパティは空白/空です。 –

+0

'nodeValue'の代わりに' Text'属性を使用するとどうなりますか? – ain

答えて

0

XMLDocumentは名前空間を正しく処理しないため、XMLファイルを調整して名前空間を削除する必要がありました。

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

<ID>TOSL108</ID> 

そして今、それが動作になりました。

0

要素ノードにヌルDOM level 1 specificationnodeValue戻るによれば:

ザはnodeNameの、のnodeValue属性と属性が特定の派生インタフェースにダウンキャストすることなく、ノード情報で取得する機構として含まれています。特定のnodeType(要素のnodeValueやCommentの属性など)に対するこれらの属性の明示的なマッピングがない場合、nullを戻します。

この要素ノードの子テキストノードに移動し、代わりにnodeValueを呼び出すことをお勧めします。

+0

それには子ノードもありませんが、問題は、ノードをテキストノードの代わりに要素ノードとして見ていると思いますか? –

+0

しかし、彼が使用するライブラリは仕様に従っていますか? 'IXMLNode.NodeValue'のドキュメント(http://docwiki.embarcadero.com/Libraries/Seattle/en/Xml.XMLIntf.IXMLNode。NodeValue)は、 'NodeType = ntElement'の場合、**要素にテキストのみが含まれている場合、そのテキスト値を返します。そうでなければ、NodeValueを読み込みまたは設定しようとすると例外が発生します。** – ain

+0

これは良い質問です。私はDOMNodeプロパティのためにこのように仮定しました。同じドキュメントでは、W3Cの推奨事項を「DOMNode」ページで明示的に参照しています。http://docwiki.embarcadero.com/Libraries/Seattle/en/Xml.XMLIntf.IXMLNode.DOMNode –

関連する問題