
<?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文件查询?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)