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();
}
È stato utile?

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
scroll top