3

我正在尝试从 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();
}
4

2 回答 2

6

您的问题是 XML 命名空间。SelectNodes不知道如何转换<w:t/>为完整的命名空间。因此,您需要使用将 anXmlNamespaceManager作为第二个参数的重载。我稍微修改了你的代码,它似乎工作:

    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();
    }
于 2009-07-08T17:59:26.537 回答
2

看看Open XML Format SDK 2.0。有一些关于如何处理文档的示例,例如

虽然我没有使用过,但您也可以看看这个Open Office XML C# Library 。

于 2009-07-08T17:53:05.567 回答