我想从一个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();
}
有帮助吗?

解决方案

您的问题是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();
    }

其他提示

看一看的 Open XML格式SDK 2.0 。有关于如何处理文档,这样

虽然我没有用它,就是有的Open Office XML C#库中,你可以看一看为好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top