以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DOM/SAX/XPath 』  (http://bbs.xml.org.cn/list.asp?boardid=11)
----  如何利用SAX读取元素的属性值?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=11&rootid=&id=36116)


--  作者:Allenihno
--  发布时间:7/27/2006 11:35:00 AM

--  如何利用SAX读取元素的属性值?
如,要读取func元素的name属性应该怎么做?
初步想法为在startElement接口中寻找func元素。不过不知道找到后,事件处理函数中怎么得到元素的属性值。MSXML SDK上只有函数介绍,麻烦哪位高人给个例子
--  作者:Allenihno
--  发布时间:8/16/2006 2:07:00 PM

--  
已经搞定,代码如下:
HRESULT STDMETHODCALLTYPE A2ContentHandler::startElement(
            /* [in] */ wchar_t __RPC_FAR *pwchNamespaceUri,
            /* [in] */ int cchNamespaceUri,
            /* [in] */ wchar_t __RPC_FAR *pwchLocalName,
            /* [in] */ int cchLocalName,
            /* [in] */ wchar_t __RPC_FAR *pwchRawName,
            /* [in] */ int cchRawName,
            /* [in] */ ISAXAttributes __RPC_FAR *pAttributes)
{
 TCHAR szCurElement[80+1] = {0};
 wcstombs(szCurElement,pwchLocalName,cchLocalName);

 TCHAR rightElement[80+1] = {0};
 _tcscpy(rightElement,"func");

 prt(L"<%s", pwchLocalName, cchLocalName);
 int lAttr;
 pAttributes->getLength(&lAttr);
 for(int i=0; i<lAttr; i++)
 {
  wchar_t * ln, * vl; int lnl, vll;
  pAttributes->getQName(i,&ln,&lnl);
  prt(L" %s=", ln, lnl);
  pAttributes->getValue(i,&vl,&vll);
  prt(L"\"%s\"", vl, vll);
 }
 printf(">");

 if (_tcscmp(szCurElement,rightElement) ==0)
 {
  printf("\n");
  int lenAttr;
  pAttributes->getLength(&lenAttr);
  for(int j=0; j<lenAttr; j++)
  {
   wchar_t *vl; int vll;
   pAttributes->getValue(j,&vl,&vll);
   nameRead = vl;
   prt(L"attributes are %s\n",nameRead,sizeof(nameRead));
  }
 }
    return S_OK;


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