以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  [求助]請問在VC++中如何實作XPath中含有功能函數來搜尋節點??  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=22944)


--  作者:yiyo990
--  发布时间:10/11/2005 3:26:00 PM

--  [求助]請問在VC++中如何實作XPath中含有功能函數來搜尋節點??
各位大大們~我是XML的新手
現在想要用MFC將已經載入的XML文件加以利用XPath進行節點搜尋
我是利用使用者自行輸入的XPath再利用selectNodes的方式來找尋節點資料
但是在測試中發現,若再輸入XPath時,XPath的式子中若包含功能函數(如:contains(), starts-with()....等等),便無法找到節點
以下是我的部分程式碼:
   CComPtr<IXMLDOMNodeList> pNodeList;
   CEdit* cedt;
   CString edit_str;
   CString list_str;
   CComBSTR bstrType;
   CComBSTR varNodeText;
   cedt = (CEdit*)GetDlgItem(IDC_EDIT_XPath);
   cedt->GetWindowText(edit_str);

   bstr = edit_str;
   
   hr = m_pXMLDom->selectNodes(bstr, &pNodeList);

   long length;

   if(SUCCEEDED(hr) && pNodeList)
   {
    hr = pNodeList->get_length(&length);
   
    for (int i=0; i<length; i++)
    {
    hr = pNodeList->get_item(i, &pNode);
    if(SUCCEEDED(hr))
    {
     hr = pNode->get_nodeTypeString(&bstrType);
     if(SUCCEEDED(hr))
     {
      list_str.Format("%S", bstrType);
     }
     
     hr = pNode->get_text(&varNodeText);
     if (SUCCEEDED(hr))
     {
      list_str.Format("%S", varNodeText);
      clbSelectSingleNode->AddString(list_str);
     }
    }
    pNode.Release();   
    }
   }
bstr就是使用者輸入的XPath路徑儲存的變數
假設我輸入//title則可以找出節點名稱為title的點
但若加上了功能函數//title[contains(.,'mp3')]則會找不到
但是我用過XSpy所提供的XPath檢查過是可以抓到點的
還請各位大大指教一下是發生什麼問題<(_ _)>感激不盡


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
2,469.971ms