2011-01-01 5 views
1

Je tente de créer une liste d'éléments spécifiques dans un document Word à l'aide d'OpenXML SDL 2.0. Je vais ouvrir un modèle et scanner le modèle Word pour tous les éléments "w: sdt" que je vais utiliser comme une liste de parties de documents disponibles. Je vais afficher cette liste à l'utilisateur afin qu'ils puissent choisir les parties/éléments désirés pour construire une nouvelle version/copie du document à partir du document modèle. Donc ma liste devra saisir le numéro d'élément séquentiel (utilisé par les classes de DocumentBuilder) ainsi que le "w: alias" "val" ou peut-être le "w: tag" "val" qui sera utilisé pour afficher l'option de sélection à l'utilisateur. Une fois que l'utilisateur a examiné la pièce XML/les éléments XML disponibles et fait sa sélection, j'utiliserai DocumentBuilder pour ajouter les parties identifiées par numéro séquentiel à un nouveau document.OpenXML SDK 2.0 Énumération de parties et d'éléments XML

J'ai utilisé DocumentBuilder pour identifier explicitement des éléments de document par numéro séquentiel pour construire un nouveau document. Cela fonctionne magnifiquement.

Je sais que je dois utiliser la récursivité pour parcourir le document modèle et ajouter les éléments qualifiés à un LISTE. Je ne suis pas encore assez averti avec C# ou le SDK OpenXML pour identifier la manière la plus élégante de recurse à travers le document de modèle ciblant la partie/les éléments XML désirés. Est-ce que quelqu'un peut me diriger vers un exemple applicable pour énumérer une liste de pièces/éléments dans un document OpenXML?

+0

... donc je fais des recherches et je pense que je devrais regarder une approche SAX-like présentée dans le blog de Brian Jones & Zeyad "Analyse et lecture de gros fichiers Excel avec le SDK Open XML". Cela permet d'utiliser un OpenXMLReader pour parcourir les parties ou les éléments XML. Je ne sais pas exactement comment le faire encore mais il semble que le chemin à parcourir. –

Répondre

1

À moins d'avoir des raisons de performance, ne pourriez-vous pas ouvrir le document en utilisant OpenXmlSdk et effectuer des requêtes LINQ pour localiser chacun de vos éléments SDT?

Quelque chose le long des lignes de:

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? 
    } 
} 

J'ai utilisé cette approche avant et filtré élément extérieur pour recueillir une liste d'éléments de SdtContent. Bien que je ne sois pas sûr de ce que vous voulez dire par les numéros d'éléments séquentiels?

+0

Damoe, excellente suggestion. –

+0

Après avoir continué mes recherches, j'ai pu utiliser les classes Builder pour saisir des éléments tels que les paragraphes et les blocs SDT. En utilisant LINQ et OpenXML SDK 2.0, je peux collecter ces éléments dans des objets IEnurmerable. –

+0

@damoe - Damoe, pourriez-vous être en mesure de m'aider avec ce qui suit: http: //stackoverflow.com/questions/15791732/openxml-sdk-having-borders-for-cell –

Questions connexes