[英]How to remove elements from a document?
有没有办法迭代文档并删除所有<:p />
元素,如果他们没有任何运行? 我试图删除段落,如果它们看起来像这样:
<w:p>
<w:pPr>
<w:pStyle w:val="Heading1" />
<w:numPr>
<w:ilvl w:val="0" />
<w:numId w:val="0" />
</w:numPr>
<w:ind w:left="432" />
</w:pPr>
</w:p>
这是我到目前为止所做的,但它只删除了空的<w:p />
元素。
foreach (Paragraph P in D.Descendants<Paragraph>().Where(x => !x.HasChildren).ToList()
你可以这样称呼:
foreach (Paragraph P in D.Descendants<Paragraph>()
.Where(o=>o.Descendants<Run>().Count() ==0).ToList()
但请记住,如果文档中有部分,则可能会导致问题(请查看此信息以获取更多信息: http : //msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.sectionproperties(v = office) .14).aspx )
我会将xml加载到XmlDocument中,然后使用linq:
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\Path\To\Xml\File.xml");
var rootNode = doc.DocumentElement;
XmlNodeList ps = rootNode.SelectNodes("//p");
for (int i = 0; i < ps.Count; i++)
{
if (ps[i].SelectNodes("//pr").Count == 0)
{
rootNode.RemoveChild(ps[i]);
}
}
该代码完全未经测试,但它确实编译。 如果这对您没有任何好处,请告诉我,并查看一些Xml解析的谷歌搜索!
我正在使用Linq,这可以做得更好。
/*parent is the document body*/
parent.Descendants<Paragraph>().Where(p=>p.Descendants<Run>().Count()==0).All(p =>
{
p.Remove();
return true;
});
希望这可以帮助。 干杯。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.