Вопрос

Я пытаюсь получить обычный текст из документа 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();
    }

Другие советы

Взгляните на SDK в формате Open XML 2.0.Есть несколько примеров того, как обрабатывать документы, вот так.

Хотя я им не пользовался, есть вот это Библиотека Open Office XML C # на это вы тоже можете взглянуть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top