如何在Delphi中使用XML文件查询?
发布时间:2020-12-15 09:20:46 所属栏目:大数据 来源:网络整理
导读:我是Delphi的新手,这就是我想做的事情.我有这样的 XML文件格式, ?xml version="1.0" encoding="UTF-8" standalone="yes"?Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Row Designation1234102/Designation Inner5.412/Inner Outer3.588/Oute
我是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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |