Как получить текст из документа Word (DOCX) в C#?
Я пытаюсь получить простой текст из текстового документа. В частности, 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();
}
2 ответа
Решение
Ваша проблема - пространства имен 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 Format SDK 2.0. Есть несколько примеров того, как обрабатывать документы, например.
Хотя я не использовал его, есть библиотека Open Office XML C#, на которую вы также можете взглянуть.