标签: ixmldomnode

Excel VBA从XML获取特定节点

我有一个来自URL API的XML文件(我没有共享的URL,因为它允许访问安全信息).从这个文件我想得到一些信息.我的问题是,一旦我在父节点(eventNode),我想简单地能够从特定的子节点获取数据.

例如,如果是eventNode <event><ID>1</ID>...<title>event 1</title></event>,我将如何1知道节点名称ID(或我想要提取的任何其他值)?

我通过论坛看了很多,但.SelectSingleNode没给我运气.也.selectNodes不会像XML字符串中的正常节点列表那样行事.我不知道这是否是由于我用来解析我的XML文件的方法.

Sub ListEvents()

Dim strPath As String

strPath = getAPI("GetEvents", "filter=&orderBy=")

Dim xmlDocument As MSXML2.DOMDocument60
Set xmlDocument = New DOMDocument60

With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", strPath, False
    .send
    xmlDocument.LoadXML .responseText
End With

Dim lvl1 As IXMLDOMNode: Dim lvl2 As IXMLDOMNode
Dim eventNode As IXMLDOMNode: Dim isNode As IXMLDOMNode

For Each lvl1 In xmlDocument.ChildNodes
    For Each lvl2 In lvl1.ChildNodes
        For Each eventNode In lvl2.ChildNodes
            If eventNode.HasChildNodes Then
                'Here …
Run Code Online (Sandbox Code Playgroud)

xml excel vba ixmldomnode

9
推荐指数
2
解决办法
5万
查看次数

如何比较两个XML节点结构Delphi

有没有办法在Delphi中比较两个xml节点?

我正在使用MSXML解析器并将xml加载到IXmlDOMDocument2中.节点存储在IXmlDOMNode中.

如果有帮助的话,我可以使用Delphi的TXMLDocument.我不想下载任何第三方组件.

我只是想比较节点的结构,而不是值.

我看到了一个类似于Java的帖子/实用程序,但对于Delphi没什么.

谢谢!

xml delphi ixmldomnode txmldocument ixmldomdocument

5
推荐指数
1
解决办法
866
查看次数

如何在VBA中初始化IXMLDOMNode?

当我在Excel VBA宏中使用以下代码时:

Dim xmlKnoten As New IXMLDOMNode
Run Code Online (Sandbox Code Playgroud)

我总是会出错。我如何正确启动它?

一个的启动DOMDocument工作:

Dim xmlDoc As Object
Set xmlDoc = CreateObject("Msxml2.DOMDocument")
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助。

xml vba ixmldomnode

5
推荐指数
1
解决办法
3358
查看次数

如何从IXMLDOMNode访问元素属性?

我正在用C++构建一个XML DOM文档.我的问题是:我从我的文档中的元素执行XPATH查询,我知道将返回另一个元素.elementPtr-> selectSingleNode调用返回IXMLDOMNode.如何访问此节点的属性?

我的一部分想要将节点转发给一个元素,但我无法让演员工作.

我试过了

MSXML2::IXMLDOMElementPtr pParentElement;
pParentNode->QueryInterface(__uuidof(MSXML2::IXMLDOMElement), 
                            (void**) &pParentElement);
Run Code Online (Sandbox Code Playgroud)

这导致以下运行时错误:

0x0057cc58 _com_error::`scalar deleting destructor'(unsigned int)
Run Code Online (Sandbox Code Playgroud)

我试过的另一条路线就是使用节点:

MSXML2::IXMLDOMNodePtr pParentNode = 
    pParameterElement->selectSingleNode("parent");
MSXML2::IXMLDOMNamedNodeMap* pParentAttributes;
pParentNode->get_attributes(&pParentAttributes);

MSXML2::IXMLDOMNodePtr pCategoryNameNode = 
    pParentAttributes->getNamedItem("Category");
VARIANT value;
pCategoryNameNode->get_nodeValue(&value);
CString categoryName = value;
Run Code Online (Sandbox Code Playgroud)

这在"parentNode-> get_attributes()"处失败.

好像我错过了一些东西; API不应该这么难用.

- 编辑 -

我缺少的是selectSingleNode调用失败,留下了一个NULL指针.你不能在那上面调用QueryInterface,也不能在其上调用get_attributes:P

我选择的答案符合我提出的问题,而不是帮助我意识到我问错了问题的答案.

c++ msxml dom ixmldomelement ixmldomnode

3
推荐指数
1
解决办法
2万
查看次数