我有一个来自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) 有没有办法在Delphi中比较两个xml节点?
我正在使用MSXML解析器并将xml加载到IXmlDOMDocument2中.节点存储在IXmlDOMNode中.
如果有帮助的话,我可以使用Delphi的TXMLDocument.我不想下载任何第三方组件.
我只是想比较节点的结构,而不是值.
我看到了一个类似于Java的帖子/实用程序,但对于Delphi没什么.
谢谢!
当我在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)
感谢您的帮助。
我正在用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
我选择的答案符合我提出的问题,而不是帮助我意识到我问错了问题的答案.