我想将Word 2007或更高版本的docx文件上传到我的Web服务器,并将目录转换为简单的xml结构。使用传统VBA在桌面上执行此操作似乎很容易。查看用于创建docx文件的WordprocessingML XML数据令人困惑。有没有一种方法(没有COM)以面向对象的方式导航文档?
答案 0 :(得分: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);
}
答案 1 :(得分: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);
}
}
博文:Open XML SDK and LINQ to XML
-Eric
答案 2 :(得分:0)
请参阅XML Documents and Data作为起点。特别是,您将需要使用LINQ to XML。
通常,您不希望在.NET应用程序中使用COM。