2009-08-18 51 views
5

我想将Word 2007或更高版本的docx文件上传到我的Web服务器,并将目录转换为简单的xml结构。使用传统的VBA在桌面上执行此操作似乎很容易。查看用于创建docx文件的WordprocessingML XML数据令人困惑。有没有一种方法(没有COM)以更多的面向对象的方式浏览文档?如何查询ASP.NET应用程序中的Word docx?

回答

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

查看XML Documents and Data作为起点。特别是,你会想使用LINQ to XML。

通常,您不想在.NET应用程序中使用COM。

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

+1

我读的Open XML自己的帖子 - 伟大的工作! – 2012-08-12 00:37:51

相关问题