2016-07-27 3 views
2

TXMLDocument를 사용하여 XML을로드하면 요소에 값이 없습니다. 나는 <cbc:ID>TOSL108</cbc:ID>이라는 요소를 가지고 다음과 같은 example file을 읽었지만, 노드를 찾았지만 그것을 텍스트 요소로 인식하지 못하고 값은 비어 있으며 자식 요소가 없다.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입니다 원래 질문

1

: 내가 XSD에서 바인딩 XML 데이터를 생성

. 즉 UBL 인보이스 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

요소 노드에는 null DOM level 1 specification, nodeValue 반환에 따르면

(가) 여기서 nodeName, nodeValue를 속성과 속성은 특정의 파생 인터페이스에 아래로 캐스팅하지 않고 노드 정보를 취득하는 메카니즘입니다 . 특정 nodeType (예 : Element의 nodeValue 또는 Comment의 속성)에 대한 이러한 속성의 명확한 매핑이없는 경우 null을 반환합니다.

이 요소 노드의 하위 텍스트 노드로 이동하고이 텍스트 노드에서 nodeValue을 대신 호출하는 것이 좋습니다.

+0

그럼에도 자식 노드가 없지만 문제는 텍스트 노드 대신 노드를 모든 노드로 보는 것입니다. –

+0

하지만 그가 사용하는 라이브러리가 사양을 따르고 있습니까? 'IXMLNode.NodeValue' 문서 (http://docwiki.embarcadero.com/Libraries/Seattle/en/Xml.XMLIntf.IXMLNode.NodeValue)는'NodeType = ntElement' then ** 요소가 텍스트 만 포함하는 경우 그 텍스트 값을 나타냅니다. 그렇지 않으면, NodeValue를 읽거나 설정하려고하면 예외가 발생합니다. ** – ain

+0

좋은 질문입니다. DOMNode 속성 때문에 그렇게 생각했습니다. 동일한 문서는 명시 적으로 W3C 권장 사항을 'DOMNode'페이지에서 명시 적으로 참조합니다. http://docwiki.embarcadero.com/Libraries/Seattle/en/Xml.XMLIntf.IXMLNode.DOMNode –