如何在ASP.NET应用程序中查询Word docx?

时间:2009-08-18 21:50:37

标签: asp.net docx openxml wordprocessingml

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

3 个答案:

答案 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。