Comment saisir le texte du mot (docx) Document en C #?
-
11-09-2019 - |
Question
Je suis en train d'obtenir le texte brut à partir d'un document Word. Plus précisément, le XPath me donne du mal. Comment sélectionnez-vous les balises? Voici le code que j'ai.
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();
}
La solution
Votre problème est le XML namespaces. SelectNodes
ne sais pas comment traduire <w:t/>
à l'espace de noms complet. , Vous devez donc utiliser la surcharge, qui prend un XmlNamespaceManager
comme second argument. J'ai modifié votre code un peu, et il semble fonctionner:
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();
}
Autres conseils
Jetez un oeil à la format Open XML SDK 2.0 . Il quelques exemples sur la façon de traiter les documents, comme ceci .
Bien que je ne l'ai pas utilisé, il y a cette Open Office XML C # Bibliothèque que vous pouvez jetez un oeil à aussi bien.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow