2012-04-02 6 views
0

노드가있는 여러 요소가 포함 된 XmlString이 있습니다.XML 문서의 하위 노드 값에 어떻게 액세스합니까?

<Element> 
    <AccountName>My Account Name</AccountName> 
    <FullName>Edward Jones</FullName> 
</Element> 

즉, 나는 이름은 계정 이름,하면 FullName을 즉 노드에 액세스 할 수 있습니다,하지만 난 값을 액세스 할 수 없습니다 또는 빈 반환합니다. 여기 내 코드가있다.

Doc : IXMLDocument; 
begin 
    Doc := XMlDoc.LoadXMLData(XmlString); 
    Doc.DOMDocument.getElementsByTagName('Element').length; // = 11 
    Doc.DOMDocument.getElementsByTagName('Element').item[2].childNodes[0].nodeName; // = AccountName 
    Doc.DOMDocument.getElementsByTagName('Element').item[2].childNodes[0].nodeValue; 
end; 

그래서 이것이 내가 기대되는, 노드 명 = 계정 이름을 체크 아웃 내 xmlString을의 '요소'의 11 개 인스턴스가 있습니다. 그러나 nodeValue는 비어 있습니다. 값을 가져올 다른 방법이 있습니까? 누구든지 노드 값이 비어있는 이유를 알고 있습니까?

답변

2

표준 DOM API처럼 보이므로 요소 노드 아래에 텍스트 노드가있을 수 있습니다.

Doc.DOMDocument.getElementsByTagName('Element').item[2].childNodes[0].childNodes[0].nodeValue; 
+0

감사합니다! – Trevor

3

하위 수준 DOM 수준까지 줄이려고합니다. 그런 점에서 @ MizardX의 응답은 정확합니다. 텍스트는 직접 액세스해야하는 고유 한 하위 노드에 포함되어 있습니다. 그러나 IXMLDocument을 사용하고 있기 때문에 멀리 떨어 뜨릴 필요가 없습니다. IXMLNode 인터페이스는, 예를 들어 최대 높고 노드와 데이터에 쉽게 액세스를 제공, 당신에게서 그 세부 사항을 숨 깁니다 속임수를 썼는지

var 
    Doc : IXMLDocument; 
    ElementNode, AccountNameNode, FullNameNode : IXMLNode; 
    Count: Integer; 
    NodeName, NodeText: String; 
begin 
    Doc := LoadXMLData(XmlString); 
    ElementNode := Doc.DocumentElement; 
    Count := ElementNode.ChildNodes.Count; // = 2 

    AccountNameNode := ElementNode.ChildNodes[0]; 
    NodeName := AccountNameNode.NodeName; 
    NodeText := AccountNameNode.Text; 

    FullNameNode := ElementNode.ChildNodes[1]; 
    NodeName := FullNameNode.NodeName; 
    NodeText := FullNameNode.Text; 
end; 
관련 문제