我想将 Word 2007 或更高版本的 docx 文件上传到我的 Web 服务器,并将目录转换为简单的 xml 结构。使用传统 VBA 在桌面上执行此操作似乎很容易。查看用于创建 docx 文件的 WordprocessingML XML 数据令人困惑。有没有办法(没有 COM)以更面向对象的方式导航文档?
问问题
1098 次
3 回答
4
我强烈建议研究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);
}
于 2009-08-19T01:04:44.733 回答
3
这是一篇关于使用 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);
}
}
-埃里克
于 2011-04-25T01:56:29.443 回答
0
请参阅XML 文档和数据作为起点。特别是,您需要使用 LINQ to XML。
通常,您不想在 .NET 应用程序中使用 COM。
于 2009-08-18T21:58:36.377 回答