2009-07-08 10 views
3

J'essaie d'obtenir le texte brut d'un document Word. Plus précisément, le xpath me donne des ennuis. Comment sélectionnez-vous les tags? Voici le code que j'ai.Comment saisir du texte à partir d'un document word (docx) en C#?

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(); 
} 

Répondre

6

Votre problème concerne les espaces de noms XML. SelectNodes ne sait pas comment traduire <w:t/> à l'espace de noms complet. Par conséquent, vous devez utiliser la surcharge, qui prend un XmlNamespaceManager comme deuxième argument. J'ai modifié un peu votre code, et cela 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(); 
    } 
+0

A travaillé parfaitement, merci. – Joe

Questions connexes