Como pegar o documento de texto do Word (DOCX) em C#?
-
11-09-2019 - |
Pergunta
Estou tentando obter o texto simples de um documento do Word. Especificamente, o XPath está me dando problemas. Como você seleciona as tags? Aqui está o código que tenho.
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();
}
Solução
Seu problema são os namespaces XML. SelectNodes
Não sei como traduzir <w:t/>
para o espaço para nome completo. Portanto, você precisa usar a sobrecarga, que leva um XmlNamespaceManager
como o segundo argumento. Modifiquei um pouco seu código e parece funcionar:
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();
}
Outras dicas
Dê uma olhada no Open XML Format SDK 2.0. Existem alguns exemplos sobre como processar documentos, assim.
Embora eu não tenha usado, existe isso OFICE OBRILHO XML C# Biblioteca que você pode dar uma olhada também.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow