zoukankan      html  css  js  c++  java
  • XPath and TXmlDocument

    XML example, from the OmniXML XPath demo:

    <?xml version="1.0" encoding="UTF-8"?>
    <bookstore>
      
    <book>
        
    <title lang="eng">Harry Potter</title>
      
    </book>
      
    <book>
        
    <title lang="eng">Learning XML</title>
      
    </book>
      
    <book>
        
    <title lang="slo">Z OmniXML v lepso prihodnost</title>
        
    <year>2006</year>
      
    </book>
      
    <book>
        
    <title>Kwe sona standwa sam</title>
      
    </book>
    </bookstore>

    Try something like this:

    uses 
      XMLDoc, XMLDom, XMLIntf;
     // From a post in Embarcadero's Delphi XML forum.
     
    function selectNode(xnRoot: IXmlNode;const nodePath: WideString): IXmlNode;
     
    var   intfSelect : IDomNodeSelect;    dnResult : IDomNode;    intfDocAccess : IXmlDocumentAccess;    doc: TXmlDocument;
     
    begin   Result :=nil;
       
    if not Assigned(xnRoot)or not Supports(xnRoot.DOMNode, IDomNodeSelect, intfSelect) then    Exit;    dnResult := intfSelect.selectNode(nodePath);
    if Assigned(dnResult) then
    begin
    if Supports(xnRoot.OwnerDocument, IXmlDocumentAccess, intfDocAccess) then   doc := intfDocAccess.DocumentObject    else    doc :=nil; Result := TXmlNode.Create(dnResult,nil, doc);
       end;
    end;

    var IDoc: IXMLDocument; INode: IXMLNode;
    begin IDoc := LoadXMLDocument('.ooks.xml'); INode := SelectNode(IDoc.DocumentElement,'/bookstore/book[2]/title');
    end;


    //================================================================================

    procedure TForm1.Button1Click(Sender: TObject);
    var
      noderef:IXMLDOMNodeRef;
      root:IXMLDOMNode;
      Node:IXMLDOMNode;


    begin
      XMLDocument1.Active:=true;
      noderef:=XMLDocument1.DocumentElement.DOMNode as IXMLDOMNodeRef;
      root:=noderef.GetXMLDOMNode;
      node:=root.selectSingleNode('node1/node2/node3/node4');
      if Assigned(node) then
      begin
        ShowMessage(node.attributes.getnameditem('title').text);
      end;
    end;
  • 相关阅读:
    poj1363Rails(栈模拟)
    centos6.5设备mysql5.6
    SGU326Perspective(网络流量的最大流量)(经典赛车模型)
    扩大或缩小undo表空间
    Boost源代码学习---shared_ptr.hpp
    leetcode
    为客户打造RAC-DG一些遇到的问题汇总
    十归并排序有用的算法和二进制搜索的基础
    Delphi TNativeXML Node节点乱码的一种解决方法
    Delphi TcxTreeList 读取 TcxImageComboBoxItem类型的值
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3179253.html
Copyright © 2011-2022 走看看