سؤال

أحاول الحصول على النص العادي من مستند Word. على وجه التحديد، يعطيني XPath مشكلة. كيف تختار العلامات؟ إليك الرمز الذي لدي.

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();
}
هل كانت مفيدة؟

المحلول

مشكلتك هي مساحات أسماء XML. SelectNodes لا أعرف كيفية ترجمة <w:t/> إلى مساحة الاسم الكامل. لذلك، تحتاج إلى استخدام الحمل الزائد، الذي يأخذ XmlNamespaceManager كما الحجة الثانية. قمت بتعديل الكود الخاص بك قليلا، ويبدو أنه يعمل:

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

نصائح أخرى

نلقي نظرة على فتح تنسيق XML SDK 2.0. وبعد هناك بعض الأمثلة حول كيفية معالجة المستندات، مثله.

على الرغم من أنني لم أستخدمها، هناك هذا Open Office XML C # مكتبة أنه يمكنك إلقاء نظرة على كذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top