Come afferrare il testo da Word (docx) documento in C #?
-
11-09-2019 - |
Domanda
Sto cercando di ottenere il testo in chiaro da un documento word. In particolare, l'xpath mi sta dando problemi. Come selezionate i tag? Ecco il codice che ho.
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();
}
Soluzione
Il tuo problema è il namespace XML. SelectNodes
non so come tradurre <w:t/>
al massimo dello spazio dei nomi. Pertanto, è necessario utilizzare l'overload, che accetta un XmlNamespaceManager
come secondo argomento. Ho modificato il codice un po ', e sembra funzionare:
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();
}
Altri suggerimenti
Date un'occhiata alla Open XML Format SDK 2.0 . C'è alcuni esempi su come elaborare un documento, come questo .
Anche se non ho usato, c'è questo Open Office XML C # libreria che si può dare un'occhiata a come bene.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow