gpt4 book ai didi

xml - FindNode 具有两个等于节点

转载 作者:行者123 更新时间:2023-12-01 16:10:48 26 4
gpt4 key购买 nike

我创建了一个根据 MySQL 行生成 XML 的 WebService,结果如下:

<DB>
<CONFIG>
<ID>1</ID>
<CODAUTORIZACAO>12345</CODAUTORIZACAO>
<CODUSUARIO>12345</CODUSUARIO>
<CODEMPRESA>12345</CODEMPRESA>
<NOMEEMPRESA>TESTE</NOMEEMPRESA>
</CONFIG>
<COLETEIROS>
<ID>1</ID>
<CODIGO>123</CODIGO>
<NOME>teste</NOME>
<PRECOCX>1</PRECOCX>
<PRECOKG>1</PRECOKG>
<PRECOCS>1</PRECOCS>
</COLETEIROS>
<COLETEIROS>
<ID>2</ID>
<CODIGO>135</CODIGO>
<NOME>ab</NOME>
<PRECOCX>12</PRECOCX>
<PRECOKG>321</PRECOKG>
<PRECOCS>12</PRECOCS>
</COLETEIROS>
</DB>

如果您看到,此 XML 有两个具有相同名称的节点 "COLETEIROS",但是当我找到带有 XMLDocument.DocumentElement.ChildNodes.FindNode('COLETEIROS') 的节点时> 我只能看到第一个。有没有办法在存在时查找Node?我正在尝试用这些值填充组合框,但我是 XMLDocument 新手。

感谢您的帮助!

最佳答案

如果有多个子节点,FindNode 将仅返回任何指定节点的第一个。 FindNode 返回一个 IXMLNode

要获取具有指定名称的所有节点的列表,请使用 IDOMNode 接口(interface)的 selectNodes() 方法。 selectNodes() 返回一个IDOMNodeList。然后,您可以像平常一样迭代节点列表。

  uses
XMLDoc,
XMLDOM,
XMLIntf;

procedure ExampleUsingSelectNodes;
const
XML = '<DB>'
+ ' <CONFIG>'
+ ' <ID>1</ID>'
+ ' <CODAUTORIZACAO>12345</CODAUTORIZACAO>'
+ ' <CODUSUARIO>12345</CODUSUARIO>'
+ ' <CODEMPRESA>12345</CODEMPRESA>'
+ ' <NOMEEMPRESA>TESTE</NOMEEMPRESA>'
+ ' </CONFIG>'
+ ' <COLETEIROS>'
+ ' <ID>1</ID>'
+ ' <CODIGO>123</CODIGO>'
+ ' <NOME>teste</NOME>'
+ ' <PRECOCX>1</PRECOCX>'
+ ' <PRECOKG>1</PRECOKG>'
+ ' <PRECOCS>1</PRECOCS>'
+ ' </COLETEIROS>'
+ ' <COLETEIROS>'
+ ' <ID>2</ID>'
+ ' <CODIGO>135</CODIGO>'
+ ' <NOME>ab</NOME>'
+ ' <PRECOCX>12</PRECOCX>'
+ ' <PRECOKG>321</PRECOKG>'
+ ' <PRECOCS>12</PRECOCS>'
+ ' </COLETEIROS>'
+ '</DB>';
var
doc: TXMLDocument;
select: IDOMNodeSelect;
nodes: IDOMNodeList;
begin
doc := TXMLDocument.Create(nil);
doc.LoadFromXML(XML);

select := doc.DocumentElement.DOMNode as IDOMNodeSelect;
nodes := select.selectNodes('COLETEIROS');

// At this point nodes is an IDOMNodeList with length 2 (i.e. contains both COLETEIROS nodes)

// process the list of nodes here
end;

或者,您可以迭代文档中的每个子节点,并测试每个子节点的所需节点名称,并仅处理与您想要的名称匹配的子节点。这比较冗长,但完全适用于 XMLDoc 接口(interface),而不需要 DOM 支持(这对于您的情况可能很重要,也可能不重要)。

假设本例中的示例 XML 文档具有相同的 XML const 声明,则手动迭代的代码将类似于:

var
doc: TXMLDocument;
node: IXMLDOMNode;
begin
doc := TXMLDocument.Create(nil);
doc.LoadFromXML(XML);

node := doc.DocumentElement.ChildNodes.First;
while Assigned(node) do
begin
if node.NodeName = 'COLETEIROS' then
begin
// Do something with this node
end;
node := node.NextSibling
end;
end;

关于xml - FindNode 具有两个等于节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38961983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com