كيفية الاستيلاء على النص من مستند Word (Docx) في C #؟
-
11-09-2019 - |
سؤال
أحاول الحصول على النص العادي من مستند 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 # مكتبة أنه يمكنك إلقاء نظرة على كذلك.
لا تنتمي إلى StackOverflow