gpt4 book ai didi

xml - 使用 IXMLDocument 在 XML 中搜索数据

转载 作者:数据小太阳 更新时间:2023-10-29 02:22:23 26 4
gpt4 key购买 nike

给出下面的 XML 示例;

  1. 如何轻松检查给定对象是否存在?
  2. 如何轻松添加组或用户类型的项目? (加一整 block )

<role>
<access>
<control>
<type>group</type>
<object>COMPUTER\Administrators</object>
</control>
<control>
<type>user</type>
<object>COMPUTER\Admin</object>
</control>
</access>
</role>

代码:

var
Doc: IXMLDOMDocument2;
Node: IXMLDOMNode;
procedure Test;
begin
Doc := CreateOleObject('Microsoft.XMLDOM') as IXMLDomDocument2;
Doc.load('test.xml');

// This Works
Node := Doc.selectSingleNode('//role/access/control');

// But this does not work:
Node := Doc.selectSingleNode('//role/access/control[type = ''group'']');

// EDIT: This does work, but how to combine with object=COMPUTER\Admin?
Node := Doc.selectSingleNode('//role/access/control[type="group"]');

// EDIT: This does not work either
Node := Doc.selectSingleNode('//role/access/control[type="group" and object="COMPUTER\Administrators"]');
end;

最佳答案

1。如何修复 XPath 表达式?

其中任何一个都将修复查询:

1) 创建dom后添加如下行:

  Doc.setProperty('SelectionLanguage', 'XPath');

2) 更好的是,您可以更明确地说明您正在创建哪个版本的解析器,并将构造行替换为:

Doc := CoDOMDocument60.Create; 

如果查询没有找到任何东西,Node 将为空。

if not Assigned(Node) then...

MSXML3 解析器的默认查询语言是 XSLPatterns。您需要将其显式设置为 XPath。自从我不得不处理它以来已经有一段时间了,但我假设 CreateOleObject 行必须创建我的默认 MSXML 解析器。

更新:您问题后半部分的解决方案无耻地(经许可)从亲切的 TLama 那里窃取。 :)

2。如何添加“控制”节点?

忽略目标文档格式和错误处理,例如这样:

procedure TForm1.Button2Click(Sender: TObject);
var
XMLRoot: IXMLDOMNode;
XMLChild: IXMLDOMNode;
XMLDocument: IXMLDOMDocument2;
begin
XMLDocument := CreateOleObject('Microsoft.XMLDOM') as IXMLDomDocument2;
XMLDocument.load('XMLFile.xml');
XMLRoot := XMLDocument.selectSingleNode('//role/access');
if Assigned(XMLRoot) then
begin
XMLRoot := XMLRoot.appendChild(XMLDocument.createElement('control'));
XMLChild := XMLRoot.appendChild(XMLDocument.createElement('type'));
XMLChild.text := 'user';
XMLChild := XMLRoot.appendChild(XMLDocument.createElement('object'));
XMLChild.text := 'COMPUTER\TLama';
XMLDocument.save('XMLFile.xml');
end;
end;

关于xml - 使用 IXMLDocument 在 XML 中搜索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12166372/

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