我有一个像这样的OOXML文档的段落元素。现在我想要的footnoterefreference id从这个文本编程使用c#。
Text From document.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;
}
我用这个来获得每个脚注的脚注参考id。在这个循环中,我不能得到类型为footnoterreference的Run的后代及其值。请帮我一下。谢谢你。
对不起,我在参数列表中犯了一个错误,我在参数列表中使用的不是Paragraph pTag
,而是OpenXmlElement pTag
。现在我把它从通用改为特定。