Cómo agarrar el texto del documento de Word (.docx) en C #?
-
11-09-2019 - |
Pregunta
Estoy tratando de obtener el texto plano de un documento de Word. En concreto, el XPath me está dando problemas. ¿Cómo se seleccionan las etiquetas? Aquí está el código que tengo.
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();
}
Solución
Su problema es que los espacios de nombres XML. SelectNodes
no sabe cómo traducir <w:t/>
al espacio de nombres completo. Por lo tanto, es necesario utilizar la sobrecarga, que toma un XmlNamespaceManager
como segundo argumento. He modificado su código un poco, y parece que funciona:
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();
}
Otros consejos
Tome un vistazo a la formato abierto XML SDK 2.0 . Hay algunos ejemplos de cómo procesar documentos, como esto .
A pesar de que no lo he utilizado, no es este Open Office XML C # Biblioteca que pueda echar un vistazo a también.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow