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;
  • 相关阅读:
    一脚踩进java之基础篇07——数组
    一脚踩进java之基础篇06——流程控制语句(if...else,while,for,switch...case)
    一脚踩进java之基础篇05——运算符
    一脚踩进java之基础篇04——变量
    [转]进程间通信
    [转]netstat 命令详解
    僵尸进程
    如何进行表的复制
    解决system调用返回ECHILD的问题
    Oracle保留2位小数
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/3179253.html
Copyright © 2011-2022 走看看