2012-06-06 64 views
1

我想从xml文件中读取数据。 我有这样的代码:无法从C++中使用MSXML的子节点获取值

IXMLDOMDocument *pXMLDom=NULL; 
IXMLDOMNodeList *pXMLDomNodeList=NULL; 
VARIANT varFileName; 
VARIANT_BOOL varStatus; 
BSTR bstrNodeValueParent = NULL; 
BSTR bstrNodeValueChild = NULL; 

CreateAndInitDOM(&pXMLDom); 
VariantFromString(L"file.xml", varFileName); 
pXMLDom->load(varFileName, &varStatus) 
if (varStatus == VARIANT_TRUE){ 

     long lengthNodeList; 
     BSTR bstrQueryTemp=SysAllocString(L"//parent_tag"); 
     pXMLDom->selectNodes(bstrQueryTemp,&pXMLDomNodeList); 
     pXMLDomNodeList->get_length(&lengthNodeList); 
     for(int j=0; j < lengthNodeList; j++){ 
      IXMLDOMNode *pNodeParent = NULL; 
      IXMLDOMNode *pNodeChild = NULL; 
      BSTR bstrNodeValueChild; 

      pXMLDomNodeList->get_item(j, &pNodeParent);  
      pNodeParent->get_xml(&bstrNodeValueParent); 
      printf("\n Parent Node: %S",bstrNodeValueParent); 

      pNodeParent->selectSingleNode(L"//child1_tag",&pNodeChild); 
      pNodeChild->get_xml(&bstrNodeValueChild); 
      printf("\n Child Node: %S",bstrNodeValueChild); 

      SysFreeString(bstrNodeValueParent); 
      SysFreeString(bstrNodeValueChild); 
      SAFE_RELEASE(pNodeParent); 
      SAFE_RELEASE(pNodeChild); 
     } 
} 

第一个printf在每个迭代的情况下返回正确的值,但第二个没有,事实上它返回第一个子元素,方案J == 0的值。为什么?

file.xml例如:

<?xml version="1.0"?> 
<!--xml file created using XML DOM object.--> 
<root created="using dom"> 
    <parent_tag> 
     <child1_tag>Child1-1</child1_tag> 
     <child2>Child1-2</child2> 
    </parent_tag> 
    <parent_tag> 
     <child1_tag>Child2-1</child1_tag> 
     <child2>Child2-2</child2> 
    </parent_tag> 
    <parent_tag> 
     <child1_tag>Child3-1</child1_tag> 
     <child2>Child3-2</child2> 
    </parent_tag> 
</root> 
+0

是否可以看到该文件? –

回答

0

XPath specs(重点煤矿):

//para选择所有para后代文档根的因此 选择所有para与上下文节点相同的文档中的元素。

你传递"//child1_tag"selectSingleNode()在循环,但这种表达总是将文档中的第一child1_tag元素相匹配,而不是在当前的父。

尝试,而不是:

pNodeParent->selectSingleNode(L"child1_tag", &pNodeChild); 
+0

非常感谢! –