Как извлечь текст из документа Word (docx) на C #?
-
11-09-2019 - |
Вопрос
Я пытаюсь получить обычный текст из документа 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 # на это вы тоже можете взглянуть.
Не связан с StackOverflow