用C++.NET创建XML文档(用正则表达式和字符串类两种方法匹配)

前一阵子搞java,可是SUN提供的帮助文档没有搜索功能,只提供了27个索引页,即26个字母开头和以‘_’开头的类或函数 ,所以想给它加个搜索功能,为此用C++.NET建了个XML文档用来查找,主要有两个关键字,<key>是要搜索的类或函数,<detail>是包括链接信息的简要说明。如下图所示:

源程序如下:



#using <system.dll>
#using <mscorlib.dll>
#using <system.xml.dll>
#using <system.drawing.dll>
#using <system.windows.forms.dll>

using namespace System;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Windows::Forms;
using namespace System::Text::RegularExpressions;
int main(){
    String^ filename;
    String^ content;
    String^ key;
    String^ detail;
    String^ word1=L"(?<=<DT>)([A]|[^A])*?(?=<?DT>)";
    String^ word2=L"(?<=<B>)([A]|[^A])*?(?=</B>)";
     System::Text::Encoding^ temp=System::Text::Encoding::GetEncoding("gb2312");
   // XmlDocument^ temp=gcnew XmlDocument();
     array<Byte>^btemp=gcnew array<Byte>(word1->Length);
     btemp=temp->GetBytes(word1);
     Regex^ elementexp=gcnew Regex(temp->GetString(btemp));
     array<Byte>^btemp1=gcnew array<Byte>(word2->Length);
     btemp1=temp->GetBytes(word2);
     Regex^ keyexp=gcnew Regex(temp->GetString(btemp1));
    for(int i=1;i<=27;i++){
        //MessageBox::Show(L"OK",L"success",MessageBoxButtons::OK,MessageBoxIcon::Information);
        filename=String::Concat(L"D://Program Files//Apache Software Foundation//Tomcat 5.5//webapps//api//index-files//index-",i.ToString(),L".html");
     FileStream^ fileStream=gcnew FileStream(filename,FileMode::OpenOrCreate,FileAccess::Read);
                 array<Byte>^b=gcnew array<Byte>(fileStream->Length);
                 fileStream->Read(b,0,b->Length);
                 System::Text::Encoding^ gb=System::Text::Encoding::GetEncoding("gb2312");
                 content=gb->GetString(b);
                 XmlDocument^ document=gcnew XmlDocument();
                 XmlElement^ element;
                 XmlElement^ root;
                 XmlElement^ keyele;
                 XmlElement^ detailele;
                 XmlNode^ xmlNode;
                 XmlText^ keytext;
                 XmlText^ detailtext;
                 //Console::Write(content);
                 xmlNode=document->CreateNode(XmlNodeType::XmlDeclaration,L"",L"");
                 document->AppendChild(xmlNode);
                
                 root=document->CreateElement(L"",L"javaapi",L"");
                
                 Match^ eleMatch=nullptr;
                 Match^ keyMatch=nullptr;
                int index1=content->IndexOf(L"<DL>");
                MatchCollection^ elematches=elementexp->Matches(content);
       for(int j=0;j<elematches->Count;j++){
                /*while(index1<content->Length){
            index1=content->IndexOf(L"<DT>",index1+4);
            int index2=content->IndexOf(L"<DT>",index1+4);
            int index5=index2;
            if(index2==-1)index2=content->IndexOf(L"</DL>");
            detail=content->Substring(index1,index2-index1);
            int index3=detail->IndexOf(L"<B>");
            int index4=detail->IndexOf(L"</B>");
            key=detail->Substring(index3+3,index4-index3-3);*/
            eleMatch=elematches[j];
             detail=eleMatch->ToString();
            keyMatch=keyexp->Matches(detail)[0];
            key=keyMatch->ToString();
            //MessageBox::Show(key,L"success",MessageBoxButtons::OK,MessageBoxIcon::Information);
            
             element=document->CreateElement(L"",L"element",L"");
             keyele=document->CreateElement(L"",L"key",L"");
             keytext=document->CreateTextNode(key);
             keyele->AppendChild(keytext);
             element->AppendChild(keyele);
           
             detailele=document->CreateElement(L"",L"detail",L"");
             detailtext=document->CreateTextNode(detail);
             detailele->AppendChild(detailtext);
             element->AppendChild(detailele);    
             root->AppendChild(element);
             //if(index5==-1)break;
             //Console::WriteLine(index1);
           }
     
       MessageBox::Show(L"OK",L"success",MessageBoxButtons::OK,MessageBoxIcon::Information);
                 document->AppendChild(root);
       String^ savename=String::Concat(L"java",i.ToString(),L".xml");
       XmlTextWriter^ writer=gcnew XmlTextWriter(savename,System::Text::Encoding::UTF8);
       document->WriteTo(writer);
       writer->Close();
            }   
    return 0;
        }

    绿色的代码使用正则表达式匹配,红色的代码使用String类匹配

    得到的XML文档如下所示:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值