gpt4 book ai didi

xml - 如何删除节点的属性 (MSXML)

转载 作者:行者123 更新时间:2023-12-03 03:27:55 25 4
gpt4 key购买 nike

假设我有一个计算 XPath 表达式“//node/@*”的结果。 MSXML6 返回一组 IXMLDOMNode 对象,它们实际上是 IXMLDOMAttribute 对象。

问题:有没有办法删除仅具有表示属性的 IXMLDOMNode 对象的属性?

问题是MSXML允许仅通过父节点删除子节点,但属性没有它(parentNode返回NULL)。因此,在使用 XPath 提取属性后,我无法将属性与节点分离。有办法解决吗?

谢谢。

最佳答案

我认为 W3C DOM 引入了 property ownerElement但 MSXML 从未尝试过 catch W3C DOM。所以我能想到的最好的方法是 XPath 和 selectSingleNode 来查找父元素。以下是使用 JScript 和 MSXML 6 完成的示例:

var doc = new ActiveXObject("Msxml2.DOMDocument.6.0");
if (doc.loadXML([
'<root>',
' <foo att="1"/>',
' <bar att="2"/>',
'</root>'
].join('\r\n')))
{
var attributes = doc.selectNodes('//@att');
for (var i = attributes.length - 1; i >= 0; i--)
{

attributes[i].selectSingleNode('..').removeAttributeNode(attributes[i]);
}
WScript.Echo(doc.xml);
}
else
{
WScript.Echo(doc.xml);
}

然后输出是

<root>
<foo/>
<bar/>
</root>

所以这个方法是有效的。我意识到您不使用 JScript,而可能使用 C++,您需要添加强制转换以获得正确的接口(interface),公开诸如 removeAttributeNode 之类的方法,但上面的内容应该足以概述该方法。

最后一点,由于您没有提到任何编程语言或环境,而只提到了 VS 2010,MSXML 适用于 native 代码,如果您使用 C# 或 VB.NET 编写托管 .NET 代码,那么您应该使用这些类在命名空间 System.Xml 及以下。

关于xml - 如何删除节点的属性 (MSXML),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10004929/

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