2015-09-17 2 views
0

У меня есть файл docx и вы хотите создать список имен файлов/уникальных комбинаций идентификаторов. Вот соответствующая часть файла docx:Как получить значение вставки и имя файла в каталоге

<w:drawing> 
     <wp:inline distT="0" distB="0" distL="0" distR="0" wp14:anchorId="2C4CE07B" wp14:editId="12367BBF"> 
     ... 
     ...    
      <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture"> 
      <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture"> 
       <pic:nvPicPr> 
       <pic:cNvPr id="2" name="ProfileGraph.png" /> 
       <pic:cNvPicPr /> 
       </pic:nvPicPr> 
       <pic:blipFill> 
       <a:blip r:embed="rId9"> 
        <a:extLst> 

так что мне нужно rId9 и ProfileGraph.png в одной записи каталога. я могу найти rId9:

var blipElements = from drawing in drawingElements 
        where drawing.Descendants<A.Blip>().Count() > 0 
        select drawing.Descendants<A.Blip>().First(); 

Но я не знаю, как получить cNvPr-elements принадлежащие к каждому из Blips в blipElements.

Я думал в линии

var names = from blip in blipElements 
      where blip.Ancestors<Picture>().First<Picture>().Descendants<....>() 

Любая помощь будет оценена.

ответ

2

Как о чем-то вроде

var body = doc.MainDocumentPart.Document.Body; 
var pics = body.Descendants<DocumentFormat.OpenXml.Drawing.Pictures.Picture>(); 
var result = pics.Select(p => new 
    { 
     Id = p.BlipFill.Blip.Embed.Value, 
     Name = p.NonVisualPictureProperties.NonVisualDrawingProperties.Name.Value 
    }); 

Где предполагается документ быть уже открыт объект WordProcessingDocument.

Результирующая переменная будет IEnumerable анонимного типа, содержащего свойства Id и Name.

Я не особо узнал о материале для обработки текстовых файлов OpenXML, но теоретически свойства Embed и Name могут быть пустыми, поэтому я полагаю, вам, возможно, придется проверить значение null перед доступом к свойству .Value.

+1

Я не могу просто сказать WOW, потому что этот сайт не дает коротких ответов. так... – Erik

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