0

猜猜人们需要一些使用 Linq-to-xml 的经验和构建 openXML word 文档的知识。

我有这个应该找到内容控件的 Linq to XML 查询。它在大多数情况下都有效,但我认为它仍然只是临时操纵而不是适当的。

如果我理解正确的话,它的工作原理是检查 StdRuns 并查找它的属性是否包含一个名为 Tag 的属性。

问题是内容控件可能不一定是 RUN 的一部分。例如,如果它首先添加到一行中。我不想以后再遇到问题,所以我想知道是否有更好的方法来使用 linq 访问所有内容控件。

这就是现在的 Linq 查询:

var cont = from sdt in document.MainDocumentPart.RootElement.Descendants<SdtRun>() 
                       let sdtPr = sdt.GetFirstChild<SdtProperties>()
                       let tag = (sdtPr == null ? null : sdtPr.GetFirstChild<Tag>())
                       where tag != null
                       select new
                       {
                           SdtProps = sdtPr,
                           TagName = tag.GetAttribute("val", sdt.NamespaceUri).Value
                       };

提前致谢。

4

1 回答 1

1

查看 Eric White 的博客。他的整个网站都非常适合学习使用 Open XML SDK 进行函数式编程。从他的网站:

private static void IterateContentControlsForPart(OpenXmlPart part)
{
    XNamespace w = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
    XDocument doc = part.GetXDocument();
    foreach (var sdt in doc.Descendants(w + "sdt"))
    {
        Console.WriteLine("Found content control");
        Console.WriteLine("=====================");
        Console.WriteLine(sdt.ToString());
        Console.WriteLine();
    }
}
于 2010-08-06T13:08:32.083 回答