如何在目录中获取嵌入值和文件名

How to get embed value and file name in a directory

我有一个 docx 文件,想要生成图片 filenames/unique ids 组合的列表。 这是 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();

但是我不知道如何获取属于blipElements中每个BlipscNvPr-elements

我的思路是

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

如有任何帮助,我们将不胜感激。

怎么样

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 属性.