如何用xpath定位符合多个属性条件的节点集
例如有xml如下:<Books><bookauthor="John"year="2009"language="En">Hello</book><bookauthor="J...
例如有xml如下:
<Books>
<book author="John" year="2009" language="En">Hello</book>
<book author="John" year="2010" language="En">Bye</book>
<book author="John" year="2009" language="Chs">Good</book>
<book author="Mike" year="2009" language="En">Thanks</book>
</Books>
现在要定位author是John,且year是2009,且language是En的节点~ 展开
<Books>
<book author="John" year="2009" language="En">Hello</book>
<book author="John" year="2010" language="En">Bye</book>
<book author="John" year="2009" language="Chs">Good</book>
<book author="Mike" year="2009" language="En">Thanks</book>
</Books>
现在要定位author是John,且year是2009,且language是En的节点~ 展开
展开全部
查找所有book节点(xpath: //book),对每个节点分析其属性,MSXML都有相关的函数.
MSXMLNS::IXMLDOMNodeListPtr pNodeList = NULL;
MSXMLNS::IXMLDOMNamedNodeMapPtr methodpAttrs = NULL;
MSXMLNS::IXMLDOMNodePtr pmethodAttrItem;
MSXMLNS::IXMLDOMNodePtr psNode;
MSXMLNS::IXMLDOMNodePtr requiredNode;
pNodeList = m_pDomDoc->selectNodes((_bstr_t)"//book");
int num = pNodeList->Getlength();
long nCount = 0;
for(int i=0;i<num;i++)
{
psNode=pNodeList->Getitem(i);//取得psNode的节点值
psNode->get_attributes(&methodpAttrs);
methodpAttrs->get_length(&nCount);
for(int nmethod = 0; nmethod < nCount; nmethod++) //属性值的循环
{
methodpAttrs->get_item(nmethod,&pmethodAttrItem);
CString strgetName = FromBSTR((_bstr_t)pmethodAttrItem->nodeName);
CString strgetValue = FromBSTR((_bstr_t)pmethodAttrItem->nodeTypedValue);//得到属性值后进行相应的操作
}
}
MSXMLNS::IXMLDOMNodeListPtr pNodeList = NULL;
MSXMLNS::IXMLDOMNamedNodeMapPtr methodpAttrs = NULL;
MSXMLNS::IXMLDOMNodePtr pmethodAttrItem;
MSXMLNS::IXMLDOMNodePtr psNode;
MSXMLNS::IXMLDOMNodePtr requiredNode;
pNodeList = m_pDomDoc->selectNodes((_bstr_t)"//book");
int num = pNodeList->Getlength();
long nCount = 0;
for(int i=0;i<num;i++)
{
psNode=pNodeList->Getitem(i);//取得psNode的节点值
psNode->get_attributes(&methodpAttrs);
methodpAttrs->get_length(&nCount);
for(int nmethod = 0; nmethod < nCount; nmethod++) //属性值的循环
{
methodpAttrs->get_item(nmethod,&pmethodAttrItem);
CString strgetName = FromBSTR((_bstr_t)pmethodAttrItem->nodeName);
CString strgetValue = FromBSTR((_bstr_t)pmethodAttrItem->nodeTypedValue);//得到属性值后进行相应的操作
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询