2011-01-01 4 views
1

Я пытаюсь создать список конкретных элементов в Word Document, используя OpenXML SDL 2.0. Я открою шаблон и сканирую шаблон Word для всех элементов «w: sdt», которые я буду использовать в качестве списка доступных частей документа. Я покажу этот список пользователю, чтобы они могли выбрать нужные элементы/элементы для создания новой версии/копии документа из документа шаблона.OpenXML SDK 2.0 Перечисление частей и элементов XML

Поэтому мой список должен будет захватить номер последовательного элемента (это используется классами DocumentBuilder), а также «w: alias» «val» или, возможно, «w: tag» «val», который будет используется для отображения опции выбора для пользователя.

После того, как пользователь просмотрел доступную XML-часть/элементы XML и сделал свой выбор, я буду использовать DocumentBuilder для добавления идентифицированных частей по порядковому номеру в новый документ.

Я успешно использовал DocumentBuilder для явного определения элементов документа по порядковому номеру для создания нового документа. Это прекрасно работает.

Я знаю, что мне нужно использовать рекурсию для итерации через документ шаблона и добавления квалифицированных элементов в список. Я просто недостаточно разбираюсь в C# или OpenXML SDK, чтобы определить наиболее элегантный способ рекурсии через шаблонный документ, ориентированный на желаемую часть/элементы XML.

Может ли кто-нибудь указать мне применимый пример для перечисления списка частей/элементов в документе OpenXML?

+0

... так что я изучаю, и я думаю, что я должен смотреть на подход SAX-Like, представленный в блоге Брайана Джонса и Zeyad в блоге «Анализ и чтение больших файлов Excel с помощью Open XML SDK». Это позволяет использовать OpenXMLReader для перемещения частей или элементов XML. Я не совсем понимаю, как это сделать, но, похоже, это путь. –

ответ

1

Если у вас нет причин для повышения производительности, вы не можете открыть документ с помощью OpenXmlSdk и выполнить запросы LINQ, чтобы найти каждый из ваших элементов SDT?

Что-то вдоль линий:

using(WordProcessingDocument doc = WordProcessingDocument.Open(byte[], false);){ 

    IEnumerable<SdtContent> sdtElements = doc.MainDocumentPart.Body.Descendants<SdtContent>(); 
    foreach(SdtContent el in sdtElements){ 
     // Collect content tag name/alias 
     // Collect your sequential element number? 
    } 
} 

Я использовал этот подход до и отфильтровываются внешний элемент, чтобы собрать список SdtContent элементов. Хотя я не уверен, что вы подразумеваете под последовательными номерами элементов?

+0

Damoe, большое предложение. –

+0

После дальнейшего изучения я смог использовать классы Builder для захвата элементов, таких как Paragraphs и SDT Blocks. Используя LINQ и OpenXML SDK 2.0, я могу собирать эти элементы в объектах IEnurmerable. –

+0

@damoe - Damoe, можете ли вы помочь мне в следующем: http: //stackoverflow.com/questions/15791732/openxml-sdk-having-borders-for-cell –

Смежные вопросы