Как получить идентификатор 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
, Теперь я изменил его с общего на конкретное. Это работает на данный момент.