如何在C#中从Word(docx)文档中提取文本?

3

我正在尝试从Word文档中获取纯文本。具体来说,xpath使我感到困扰。如何选择<p>标签?以下是我的代码:

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个回答

6

你的问题出在XML命名空间上。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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接