C# - 从包含Word字段的XML数据中读取纯文本

时间:2013-12-06 03:34:18

标签: c# xml word

我正在为应用程序开发“搜索”功能,其中我在XML内容中搜索关键字。我只需要搜索纯文本,即没有xml标签或字段。下面是我用来读取文本的代码片段(不包括XML标签和二进制数据):

  StringBuilder result = new StringBuilder();
  var reader = System.Xml.XmlReader.Create(new System.IO.StringReader(strXmlContent));

  while (reader.Read())
  {
      if (reader.Name == "pkg:binaryData" || reader.Name == "w:binData")
      {
           reader.Skip();
      }
      if (reader.NodeType == XmlNodeType.Text)
      {
           result.Append(reader.Value);
      }
  }

  //Plain text without XML tags.
  string plainText = result.ToString();

  if (txt.ToLower().Contains(SearchText.ToLower()))
  {
       // display search results
  }

但是,我发现由于这个xml实际上存储了Word文档内容,它还包含Word字段,如:(REF _Ref325306498 \ h * MERGEFORMAT图1和REF _Ref325306499 \ h * MERGEFORMAT图2)

这里我要搜索的内容是“(图1和图2)”。 但我无法找到此文本,因为它还包含MERGEFORMAT和其他Word字段。

如何只读取此xml数据中的纯文本?

2 个答案:

答案 0 :(得分:0)

在解析包含Word文件的每个XML DOM元素之后,您可以将word文档解析为字符串,然后将其用于搜索 - 提供了几种方法来将word文档内容作为字符串在此{ {3}} - 基本上,您可以使用Word自动化将文档保存为文本,也可以使用第三方库或使用代码中的Word DOM。

答案 1 :(得分:0)

您可以尝试使用XElement和XPath。您需要在using指令中添加System.Xml.Linq和System.Xml.XPath命名空间。

var xml = XElement.Load("filepath");
string searchText="your search text";
var matchElements=xml.XPathSelectElements(@"//*[contains(.,'"+searchText+"')]");