我想要将Word 2007或更高版本的docx文件上传到我的Web服务器,并将目录转换为一个简单的xml结构。在桌面上使用传统的VBA进行此操作似乎很容易。但是,查看用于创建docx文件的WordprocessingML XML数据非常令人困惑。有没有一种(无需COM)以更面向对象的方式浏览文档的方法?
我强烈推荐您了解Open XML SDK 2.0。虽然它是CTP版本,但我发现它在处理xmlx文件时非常有用,而且完全不需要涉及COM。文档可能有点简略,但需要查找的关键内容是DocumentFormat.OpenXml.Packaging.WordprocessingDocument类。如果将扩展名改为.zip并深入XML文件,您可以分解.docx文档。从中可以看出,目录包含在“结构化文档”标签中,而标题之类的内容则在超链接中。通过一些尝试,我发现以下代码应该有效(或者至少可以作为起点)。
WordprocessingDocument wordDoc = WordprocessingDocument.Open(Filename, false);
SdtBlock contents = wordDoc.MainDocumentPart.Document.Descendants<SdtBlock>().First();
List<string> contentList = new List<string>();
foreach (Hyperlink section in contents.Descendants<Hyperlink>())
{
contentList.Add(section.Descendants<Text>().First().Text);
}
这是一篇关于使用LINQ to XML查询Open XML WordprocessingML文档的博客文章。使用该代码,您可以编写以下查询:
using (WordprocessingDocument doc =
WordprocessingDocument.Open(filename, false))
{
foreach (var p in doc.MainDocumentPart.Paragraphs())
{
Console.WriteLine("Style: {0} Text: >{1}<",
p.StyleName.PadRight(16), p.Text);
foreach (var c in p.Comments())
Console.WriteLine(
" Comment Author:{0} Text:>{1}<",
c.Author, c.Text);
}
}