代码之家  ›  专栏  ›  技术社区  ›  Joe

如何在C#中从word(docx)文档中获取文本?

  •  3
  • Joe  · 技术社区  · 16 年前

    public static string TextDump(Package package)
    {
        StringBuilder builder = new StringBuilder();
    
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(package.GetPart(new Uri("/word/document.xml", UriKind.Relative)).GetStream());
    
        foreach (XmlNode node in xmlDoc.SelectNodes("/descendant::w:t"))
        {
            builder.AppendLine(node.InnerText);
        }
        return builder.ToString();
    }
    
    2 回复  |  直到 15 年前
        1
  •  6
  •   Todd Main    15 年前

    SelectNodes 我不知道怎么翻译 <w:t/> 到完整的命名空间。因此,您需要使用重载,这需要 XmlNamespaceManager

        public static string TextDump(Package package)
        {
            StringBuilder builder = new StringBuilder();
    
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(package.GetPart(new Uri("/word/document.xml", UriKind.Relative)).GetStream());
            XmlNamespaceManager mgr = new XmlNamespaceManager(xmlDoc.NameTable);
            mgr.AddNamespace("w", "http://schemas.openxmlformats.org/wordprocessingml/2006/main");
    
            foreach (XmlNode node in xmlDoc.SelectNodes("/descendant::w:t", mgr))
            {
                builder.AppendLine(node.InnerText);
            }
            return builder.ToString();
        }
    
        2
  •  2
  •   Magnus Johansson    16 年前

    看一看 Open XML Format SDK 2.0 . 这里有一些关于如何处理文档的示例, like this

    虽然我没有用过,但有一个 Open Office XML C# Library