如何在目录

时间:2015-09-17 10:01:13

标签: c# openxml

我有一个docx文件,想要生成图片文件名/唯一ID组合的列表。 以下是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>

所以我需要在一个目录条目中rId9ProfileGraph.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<....>()

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分: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
    });

假设doc是已打开的WordProcessingDocument对象。

结果变量将是包含Id和Name属性的匿名类型的IEnumerable。

我对处理OpenXML的文字并不是特别了解,但理论上,Embed和Name属性可能为null,所以我想你可能必须在访问'.Value'属性之前测试null。