Как получить идентификатор FootnoteRefrence в OpenXML, используя C#

У меня есть элемент абзаца документа OOXML, как это. Теперь я хочу, чтобы идентификатор FootNoteRefrence из этого текста программно, используя C#.

Текст из документа.xml

<w:p>
  <w:r>
    <w:rPr>
      <w:rStyle w:val="FootnoteReference" />
    </w:rPr>
    <w:footnoteReference w:id="2" />
  </w:r>
</w:p>

Код C#

private BodyPara writePara(BodyPara bPara2, OpenXmlElement pTag)
    {
        Footnotes fn = null;
        foreach (var run in pTag.Descendants<Run>())
        {
            if (run.HasChildren)
            {

                foreach (var runProp in run.Descendants<RunProperties>())
                {
                    foreach (var runStyle in runProp.Descendants<RunStyle>())
                    {

                        if (runStyle.Val != null)
                        {
                            string runSty = runStyle.Val.Value;
                            if (runSty == "FootnoteReference")
                            {
                                if (fn != null)
                                {
                                    bPara2.FootNotes.Add(fn);

                                }
                                fn = new Footnotes();

                            }
                            else if (runSty == "CommentReference")
                            {


                            }
                            else
                            {
                                if (fn != null)
                                {
                                    fn.FootText = fn.FootText + run.InnerText;
                                }
                            }

                        }
                    }
                    //FootnotesPart footnotesPart = wordDoc.MainDocumentPart.FootnotesPart;
                    //if (footnotesPart != null)
                    //{
                    //  IEnumerable<Footnote> footnotes = footnotesPart.Footnotes.Elements<Footnote>();
                    // ...
                    //}
                    if (runProp.NextSibling() != null)
                    {
                        OpenXmlElement fr = runProp.NextSibling();
                        foreach (var fnref in fr)
                        {
                            if (fnref != null)
                            {
                                // fn.FootnoteID = fnref.Id.Value.ToString();
                            }
                        }
                    }
                    foreach (var shd in runProp.Descendants<Shading>())
                    {
                        if (shd.Fill != null)
                        {
                            string shdvalue = shd.Fill.Value;
                        }
                    }
                }
            }
        }

        return bPara2;
    }

Я использую это, чтобы получить идентификационный номер сноски каждой сноски. В этом цикле я не могу получить Потомки Run типа FootNoteReference, а также его значение. Пожалуйста, помогите мне с этим. Благодарю вас.

1 ответ

Извините, что допустил ошибку в параметрах, вместо использования Paragraph pTag в списке параметров я использовал OpenXmlElement pTag, Теперь я изменил его с общего на конкретное. Это работает на данный момент.

Другие вопросы по тегам