如何在Delphi中使用XML文件查询?

如何在Delphi中使用XML文件查询?,第1张

概述我是Delphi的新手,这就是我想做的事情.我有这样的 XML文件格式, <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Row> <Designation>1234102</Design 我是Delphi的新手,这就是我想做的事情.我有这样的 XML文件格式,

<?xml version="1.0" enCoding="UTF-8" standalone="yes"?><Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">    <Row>        <Designation>1234102</Designation>        <Inner>5.412</Inner>        <Outer>3.588</Outer>        <Spin>4.732</Spin>        <Cage>0.399</Cage>    </Row>    <Row>        <Designation>1342153</Designation>        <Inner>5.916</Inner>        <Outer>4.084</Outer>        <Spin>5.277</Spin>        <Cage>0.408</Cage>    </Row>    ........</Data>

我想用Delphi查询它.例如:我想要哪里的数据是1342153.什么是最好和最简单的解决方案?

提前感谢您的示例和解释.

解决方法 我将假设一旦你找到了指定,你就会想要阅读与指定一致的其他条目(内部,外部,旋转和笼子).

XPath是解决此问题的完美解决方案.我的示例使用了一个只有TMemo和Tbutton的新表单,并为button1.OnClick事件添加了一个处理程序:

uses  MSXML,ComObj,ActiveX;const  XMLText =  '<?xml version="1.0" enCoding="UTF-8" standalone="yes"?>' +             '<Data>' +              '<Row>' +                  '<Designation>1234102</Designation>' +                  '<Inner>5.412</Inner>' +                  '<Outer>3.588</Outer>' +                  '<Spin>4.732</Spin>' +                  '<Cage>0.399</Cage>' +              '</Row>' +              '<Row>' +                 '<Designation>1342153</Designation>' +                 '<Inner>5.916</Inner>' +                  '<Outer>4.084</Outer>' +                  '<Spin>5.277</Spin>' +                  '<Cage>0.408</Cage>' +              '</Row>' +          '</Data>';procedure TForm1.button1Click(Sender: TObject);var  XMLDoc: IXMLDOMdocument;  Node,SibNode: IXMLDOMNode;begin  Memo1.Clear;  XMLDoc := CodoMdocument.Create;  XMLDoc.loadXML(XMLText);  // Select the node with the Designation you want.  Node := XMLDoc.selectSingleNode('//Designation[text()="1342153"]');  if Assigned(Node) then  begin    Memo1.lines.Add('Found it.');    Memo1.lines.Add(Node.nodename + ' = ' + Node.firstChild.nodeValue);    // Read all the nodes at the same level as the Designation    SibNode := Node.nextSibling;    while SibNode <> nil do    begin      Memo1.lines.Add(SibNode.nodename + ' = ' +                       SibNode.firstChild.nodeValue);      Sib := Sib.nextSibling;    end;  end;end;

如果你想抓住所有< Row>元素,并循环它们包含的信息,你可以使用它(向上面的测试应用添加第二个按钮,并将其用于button2.OnClick处理程序):

procedure TForm1.button2Click(Sender: TObject);var  XMLDoc: IXMLDOMdocument;  NodeList: IXMLDOMNodeList;  Node,SibNode: IXMLDOMNode;  i: Integer;begin  Memo1.Clear;  XMLDoc := CodoMdocument.Create;  XMLDoc.loadXML(XMLText);  NodeList := XMLDoc.selectNodes('/Data/Row');  if Assigned(NodeList) then  begin    for i := 0 to NodeList.length - 1 do    begin      Node := NodeList.item[i];      SibNode := Node.firstChild;      while Assigned(SibNode) do      begin        Memo1.lines.Add(SibNode.nodename + ' = ' +                         SibNode.firstChild.nodeValue);        SibNode := SibNode.nextSibling;      end;    end;    // Add a blank line between grouPings for readability    Memo1.lines.Add('');  end;end;
总结

以上是内存溢出为你收集整理的如何在Delphi中使用XML文件查询?全部内容,希望文章能够帮你解决如何在Delphi中使用XML文件查询?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1248798.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存