2

xmlファイルから読み込みたい。私はこのコードを持っています:

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 は各反復ケースで正しい値を返しますが、2 番目の 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>
4

1 に答える 1

1

XPath仕様から(強調鉱山):

//paraドキュメントルートのすべてのpara子孫を選択し、コンテキストノードと同じドキュメント内のすべての要素を選択します。 para

ループでに渡しますが、この式は常に、現在の親ではなく、ドキュメントの最初の要素と一致"//child1_tag"します。selectSingleNode()child1_tag

代わりに試してください:

pNodeParent->selectSingleNode(L"child1_tag", &pNodeChild);
于 2012-06-06T14:36:11.373 に答える