【问题标题】:C# - Read plain text from XML data containing Word fieldsC# - 从包含 Word 字段的 XML 数据中读取纯文本
【发布时间】:2013-12-06 12:09:22
【问题描述】:

我正在为一个应用程序开发“搜索”功能,在该应用程序中我在 XML 内容中搜索关键字。我只需要搜索纯文本,即没有 xml 标签或单词字段。下面是我用来读取文本的代码的 sn-p(不包括 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 数据中只读取纯文本?

【问题讨论】:

    标签: c# xml word


    【解决方案1】:

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

    【讨论】:

    • 阿南德,感谢您的回复。这确实有点帮助。但是当我尝试用 xml 内容加载 word 文档时,我得到了 OutOfMemoryException,因为我们在这里循环了许多数据库记录(xmlContent 来自数据库)。
    【解决方案2】:

    您可以尝试使用 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+"')]");
    

    【讨论】:

      猜你喜欢
      • 2014-08-10
      • 2011-10-30
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      相关资源
      最近更新 更多