也就是使用XPath的方式,具体语法规则查看http://www.w3school.com.cn/xpath/xpath_syntax.asp,说明得相当详细。这里列举例子是说明在Lazarus/FPC下具体应用于实现,以及注意事项。首先可以构建一个“ReadXPath”的函数方便调用。毕竟每次使用EvaluateXPathExpression后还有些任务要处理……。

  1. function ReadXPath(const aNode: TDOMNode; const aPath: string): TDOMNode;
  2. var
  3. rv: TXPathVariable;
  4. tl: TFPList;
  5. begin
  6. Result := nil;
  7. if Assigned(aNode) then
  8. begin
  9. rv := EvaluateXPathExpression(aPath, aNode);
  10. if Assigned(rv) then
  11. begin
  12. tl := rv.AsNodeSet;
  13. if Assigned(tl) then
  14. begin
  15. if tl.Count > 0 then
  16. begin
  17. Result := TDOMNode(tl[0]);
  18. end;
  19. end;
  20. end;
  21. end;
  22. end;

具体使用了,要记住返回的其实是“元素”,就算强制约定了“属性”——[@Attrib],所以要读取任何值,都要按“扫描到元素”的方式来处理。

  1. function ReadCFG: boolean;
  2. var
  3. .....
  4. vConfigXml: string = '';
  5. HistoryPath: string = '';
  6. TracePath: string = '';
  7. vXP: TDOMNode;
  8. .....
  9. begin
  10. Result := False;
  11. ReadXMLFile(xmlCfg, vConfigXml);
  12. vXP := ReadXPath(xmlCfg, '/Config/HistoryPath[@value]');
  13. if Assigned(vXP) then
  14. begin
  15. if vXP.HasAttributes then
  16. HistoryPath := vXP.Attributes.Item[0].NodeValue;
  17. end;
  18. vXP := ReadXPath(xmlCfg, '/Config/TracePath[@value]');
  19. if Assigned(vXP) then
  20. begin
  21. if vXP.HasAttributes then
  22. TracePath := vXP.Attributes.Item[0].NodeValue;
  23. end;
  24. if (HistoryPath <> '') and (TracePath <> '') then
  25. .....
  26. end;

Lazarus Reading XML- with TXMLDocument and TXPathVariable的更多相关文章

  1. WCF服务接口多,客户端在引用时出错!报WCF The maximum nametable character count quota (16384) has been exceeded while reading XML data错误

    WCF服务接口多,客户端在引用时出错!报WCF The maximum nametable character count quota (16384) has been exceeded while ...

  2. [Bug]The maximum array length quota (16384) has been exceeded while reading XML data.

    写在前面 在项目中,有客户反应无法正常加载组织结构树,弄了一个测试的程序,在日志中查看到如下信息: Error in deserializing body of reply message for o ...

  3. WCF常见异常-The maximum string content length quota (8192) has been exceeded while reading XML data

    异常信息:The maximum string content length quota (8192) has been exceeded while reading XML data 问题:调用第三 ...

  4. The maximum string content length quota (8192) has been exceeded while reading XML data

    原文:The maximum string content length quota (8192) has been exceeded while reading XML data 问题场景:在我们W ...

  5. Lazarus Reading XML- with TXMLDocument and TDOMNode

    这里读取'HistoryPath' ,'TracePath' 元素下的‘value’属性使用的是 var xmlCfg: TXMLDocument; .... function ReadXMLCFG: ...

  6. 调用WebServiceWebService提示The maximum string content length quota (8192) has been exceeded while reading XML data的解决办法

    在web.config中,bindings节点下,对应的服务名称中,原本可能是自动折叠的“/>”,需要改成手动折叠的</binding>,然后在中间加上<readerQuota ...

  7. Using TXMLDocument, Working with XML Nodes

    Using TXMLDocument The starting point for working with an XML document is the Xml.XMLDoc.TXMLDocumen ...

  8. Lazarus中TreeView导出XML以及XML导入TreeView

    本来说是要给自己的某程序加一个xml导出功能,但是自己也没接触过xml,加之delphi和lazarus的xml部分还都不一样,折腾好久(整一天)才解决问题.. 如下是作为导出功能的组件部分: uni ...

  9. 查看 AndroidManifest.xml文件

    1.Manifest Explorer 装在Android手机中,用此apk看系统中已安装应用的AndroidManifest.xml文件: protected boolean configForPa ...

随机推荐

  1. Nginx 重写规则指南

    作者:运维生存时间 - 默北 链接:www.ttlsa.com/nginx/nginx-rewriting-rules-guide/ 当运维遇到要重写情况时,往往是要程序员把重写规则写好后,发给你,你 ...

  2. 移动端,input输入获得焦点被键盘遮住简单解决方案

    (function (window,document) { document.querySelector('input[type="text"]').addEventListene ...

  3. 《Sams Teach Yourself Windows® Workflow Foundation in 24 Hours》读书笔记目录

    目录 1 Part I - The Basics 1.1 Hour 1 - Understanding Windows Workflow Foundation 1.2 Hour 2 - A Spin ...

  4. fibonacci数列的题目——剑指Offer

    https://www.nowcoder.net/practice/c6c7742f5ba7442aada113136ddea0c3?tpId=13&tqId=11160&tPage= ...

  5. Android 属性动画(Property Animation) 全然解析 (上)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38067475 1.概述 Android提供了几种动画类型:View Animat ...

  6. C++类库

    转载自:http://blog.csdn.net/Augusdi/article/details/8989763 基础类 一.C++标准库 1. Dinkumware C++ Library 参考站点 ...

  7. 总是有人想在android上直连mysql,是猴子请来的逗比吗?

    总是有人想在android上直连mysql,都是是猴子请来的逗比吗?

  8. C++链表冒泡,归并,插入排序(纯指针)

    #include <iostream> using namespace std; //别问我为什么要写链表的冒泡排序. struct Node { int data; Node *next ...

  9. 使用VS2005安装和编译QT4.53源码

    学习Qt,当然是QT4好.可是装了4.86以后,网上下载的书中的例子大多无法直接用VS执行(个人不喜欢用QT Creator),即打开pro转换的时候出错(我也懒的研究为什么出错了).看了一下发布时间 ...

  10. timeout in asp.net

    Forms authentication timeout vs sessionState timeout They are different things. The Forms Authentica ...