我正在使用html敏捷包将我的html文档的内容读成字符串等。完成后,我想删除该类内容中的certian元素,但是我遇到了问题
我的Html看起来像这样:
<div id="wrapper">
<div class="maincolumn" >
<div class="breadCrumbContainer">
<div class="breadCrumbs">
</div>
</div>
<div class="seo_list">
<div class="seo_head">Header</div>
</div>
Content goes here...
</div>
现在,我使用了一个xpath选择器来获取其中的所有内容,并使用了InnerHtml属性,如下所示:
node = doc.DocumentNode.SelectSingleNode("//div[@id='wrapper']");
if (node != null)
{
pageContent = node.InnerHtml;
}
从这一点开始,我想删除带有“breadCrumbContainer”类的div,但是当使用下面的代码时,我收到错误:“集合中找不到”节点“”
node = doc.DocumentNode.SelectSingleNode("//div[@id='wrapper']");
node = node.RemoveChild(node.SelectSingleNode("//div[@class='breadCrumbContainer']"));
if (node != null)
{
pageContent = node.InnerHtml;
}
有人可以对此有所了解吗?我是Xpath的新手,也是HtmlAgility库的新手。
谢谢,
戴夫
答案 0 :(得分:11)
这是因为RemoveChild只能删除一个直接的孩子,而不是一个大孩子。试试这个:
HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='breadCrumbContainer']");
node.ParentNode.RemoveChild(node);
答案 1 :(得分:0)
这对XSLT来说是一个非常简单的任务:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match=
"div[@class='breadCrumbContainer'
and
ancestor::div[@id='wrapper']
]
"/>
</xsl:stylesheet>
将此转换应用于提供的XML文档(添加了另一个<div>
并包装到<html>
顶级元素中,以使其更具挑战性和真实性:< / p>
<html>
<div id="wrapper">
<div class="maincolumn" >
<div class="breadCrumbContainer">
<div class="breadCrumbs"></div>
</div>
<div class="seo_list">
<div class="seo_head">Header</div>
</div> Content goes here...
</div>
</div>
<div>
Something else here
</div>
</html>
产生了想要的正确结果:
<html>
<div id="wrapper">
<div class="maincolumn">
<div class="seo_list">
<div class="seo_head">Header</div>
</div> Content goes here...
</div>
</div>
<div>
Something else here
</div>
</html>