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

发布于 2024-07-27 00:59:30 字数 491 浏览 11 评论 0原文

我正在尝试从 Word 文档中获取纯文本。 具体来说,xpath 给我带来了麻烦。 你如何选择标签? 这是我的代码。

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();
}

I'm trying to get the plain text from a word document. Specifically, the xpath is giving me trouble. How do you select the tags? Here's the code I have.

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();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

豆芽 2024-08-03 00:59:30

您的问题是 XML 命名空间。 SelectNodes 不知道如何将 转换为完整的命名空间。 因此,您需要使用重载,它将 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();
    }

Your problem is the XML namespaces. SelectNodes don't know how to translate <w:t/> to the full namespace. Therefore, you need to use the overload, that takes an XmlNamespaceManager as the second argument. I modified your code a bit, and it seems to work:

    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();
    }
甜柠檬 2024-08-03 00:59:30

查看开放 XML 格式 SDK 2.0。 有一些关于如何处理文档的示例,像这样。

虽然我没有用过,但是有这个 Open Office XML C# Library 可以看一下也在。

Take a look at the Open XML Format SDK 2.0. There some examples on how to process documents, like this.

Although I have not used it, there is this Open Office XML C# Library that you can take a look at as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文