Помогите мне улучшить OpenXML linq-to-xml запрос! - PullRequest
0 голосов
/ 06 августа 2010

Полагаю, людям нужен некоторый опыт работы с Linq-to-xml и знание построения документа Word OpenXML.

У меня есть этот запрос 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
                       };

Заранее спасибо.

1 Ответ

1 голос
/ 06 августа 2010

Проверьте блог Эрика Уайта . Весь его сайт действительно хорош для изучения функционального программирования с помощью 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();
    }
}
...