我将一个word文档转成xml,转换之后xml文档十分复杂,我想用C#提取文档中红色词组,部分xml内容如下:<w:sz w:val="24"/></w:rPr></w:pPr><w:r wsp:rsidRPr="00BF2E91"><w:rPr><w:rFonts w:hint="fareast"/><wx:font wx:val="宋体"/><w:b/><w:color w:val="FF0000"/><w:sz w:val="24"/></w:rPr><w:t>我想提取的内容</w:t></w:r></w:p><w:p wsp:rsidR="00E2526D" wsp:rsidRPr="00BF2E91" wsp:rsidRDefault="00E2526D" wsp:rsidP="00BF2E91"><w:pPr><w:adjustRightInd w:val="off"/><w:snapToGrid w:val="off"/><w:spacing w:line="360" w:line-rule="auto"/><w:ind w:first-line-chars="200"/><w:rPr><w:sz w:val="24"/></w:rPr></w:pPr><w:r wsp:rsidRPr="00BF2E91"><w:rPr><w:rFonts w:hint="fareast"/><w:sz w:val="24"/></w:rPr><w:t>2008-6-27 08</w:t></w:r><w:r wsp:rsidRPr="00BF2E91"><w:rPr><w:rFonts w:hint="fareast"/><wx:font wx:val="宋体"/>
应该怎么做呢?小弟xml不是很了解~~望大虾指点~~~

解决方案 »

  1.   

    我所了解,用正则表达式是可以匹配出来的,但是文档内容很多的时候速度很慢,直接用.NET的xml方法应该也可以做得,请高手指点一下~!
      

  2.   

    LZ可否把xml整理下.太乱了.不好看
    整理下重新发出来吧.那样才好帮你
      

  3.   

    转换之后的xml的节点结构很混乱~~如果理清节点结构的话应该好处理一些~~
      

  4.   

    <w:color w:val="FF0000"/>就是颜色的标记,在原word中就是红色的,标记到后面的文本:“我要提取的内容”。
      

  5.   

    用正则表达式吧
    System.Text.RegularExpressions.Regex.Replace(this.richTextBox1.Text, "<\\w*>|</\\w*>", "");
      

  6.   

    我晕...我将你的XML代码拷到VS去格式化..不行...是乱的...帮不了你了..
      

  7.   

    既然楼主要解析xml。友情提示用xpath.具体例子参见
    http://topic.csdn.net/u/20081024/00/200484df-bf81-4449-8c63-2ba0cac07a56.html
    19楼代码,你的这个xml代码好像格式不合规范
      

  8.   

    放到工具里后自动转成这样的格式,不过你这个XML内容不完整,有些地方格式也不对。
    <?xml version="1.0" encoding="utf-8" ?> 
    <w:sz w:val="24" /> </w:rPr> </w:pPr> <w:r wsp:rsidRPr="00BF2E91">
    <w:rPr>
    <w:rFonts w:hint="fareast" />
    <wx:font wx:val="宋体" />
    <w:b />
    <w:color w:val="FF0000" />
    <w:sz w:val="24" />
    </w:rPr>
    <w:t>我想提取的内容 </w:t>
    </w:r> </w:p> <w:p wsp:rsidR="00E2526D" wsp:rsidRPr="00BF2E91" wsp:rsidRDefault="00E2526D" wsp:rsidP="00BF2E91">
    <w:pPr>
    <w:adjustRightInd w:val="off" />
    <w:snapToGrid w:val="off" />
    <w:spacing w:line="360" w:line-rule="auto" />
    <w:ind w:first-line-chars="200" />
    <w:rPr>
    <w:sz w:val="24" />
    </w:rPr>
    </w:pPr>
    <w:r wsp:rsidRPr="00BF2E91">
    <w:rPr>
    <w:rFonts w:hint="fareast" />
    <w:sz w:val="24" />
    </w:rPr>
    <w:t>2008-6-27 08 </w:t>
    </w:r>
    <w:r wsp:rsidRPr="00BF2E91">
    <w:rPr>
    <w:rFonts w:hint="fareast" />
    <wx:font wx:val="宋体" /> 
      

  9.   

    囧……首先,LZ应该也已经知道乱了……其次,红字看不到……最后,用C#自带的XML解析类应该能比较容易达到目的……
      

  10.   


    你这个XML文件存在格式问题,我重新给你举个例子吧(这是今天CSDN某个帖子的XML内容,姑且将此XML文件命名为XMLTest.xml):
    <?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
     <ShellOrder> 
     <OneRM> 
      <Sender>Shell </Sender> 
      <Quantity>3 </Quantity> 
     <Unit> 
      <CompName>RIY-L-99971 </CompName> 
      <JoinDomain>No </JoinDomain> 
      <AdminPW>g6XHr8p2BCb5v3 </AdminPW>
      </Unit> 
     <Unit> 
      <CompName>PPP-L-99972 </CompName> 
      <JoinDomain>No </JoinDomain> 
      <AdminPW>g6XHr8p2BCb5v4 </AdminPW> 
      </Unit> 
     <Unit> 
      <CompName>XXX-L-99973 </CompName> 
      <JoinDomain>No </JoinDomain> 
      <AdminPW>g6XHr8p2BCb5v5 </AdminPW> 
      </Unit> 
      </OneRM> 
     <OneRM> 
      <Sender>Shell </Sender> 
      <Quantity>2 </Quantity> 
     <Unit> 
      <CompName>SLMBCA-L-99998 </CompName> 
      <JoinDomain>No </JoinDomain> 
      <AdminPW>Kb9a5G2Uhp6ADx </AdminPW> 
      </Unit> 
     <Unit> 
      <CompName>SDFSD-L-99998 </CompName> 
      <JoinDomain>No </JoinDomain> 
      <AdminPW>Sd9a5G2Uhp6ADx </AdminPW> 
      </Unit> 
      </OneRM> 
     <OneRM> 
      <Sender>Shell </Sender> 
      <Quantity>1 </Quantity> 
     <Unit> 
      <CompName>RIY-L-99974 </CompName> 
      <JoinDomain>No </JoinDomain> 
      <AdminPW>g6XHr8p2BCb5v3 </AdminPW> 
      </Unit> 
      </OneRM> 
      </ShellOrder> 现在我要取所有<CompName>节点的内容(类似于你要取<W:t>的内容):
    string result=string.Empty;
    XmlDocument xmlDoc=new XmlDocument();
    xmlDoc.Load("XMLTest.xml");
    XmlNodeList xmlList = xmlDoc.GetElementsByTagName("CompName");
    foreach(XmlNode xnf in xmlList)
    {
    result += xnf.InnerText + "\r\n";
    }
    执行代码后,结果如下:
    RIY-L-99971 
    PPP-L-99972 
    XXX-L-99973 
    SLMBCA-L-99998 
    SDFSD-L-99998 
    RIY-L-99974