可以删除具有(x)符号(包括父div )的项。
<div>
<div>
<h2 id="-663241532">
<span>Item 1</span>
</h2>
<p>Content 1</p>
</div>
<div>
<h4 id="1074494955">
<span>(x)Item 1.1.1</span>
</h4>
<p>Title 2</p>
<div>
Content 2
</div>
</div>
</div>移除后必须是
<div>
<div>
<h2 id="-663241532">
<span>Item 1</span>
</h2>
<p>Content 1</p>
</div>
</div>我写了这个regex
@"<div>(.*?)<span>\(x\)(.*?)</span>(.*?)</div>"但它也删除了第一个div。
我有身份证-663241532,如果有帮助的话。
发布于 2013-11-04 14:51:02
我建议您使用HtmlAgilityPack (可从NuGet获得)来使用HTML:
HtmlDocument doc = new HtmlDocument();
doc.Load("index.html");
var spans = doc.DocumentNode.SelectNodes("//span[contains(., '(x)')]");
foreach (var span in spans)
{
HtmlNode parent = span.ParentNode;
while (parent != null)
{
if (parent.Name == "div")
{
parent.Remove();
break;
}
parent = parent.ParentNode;
}
}上面的XPath选择所有包含(x)文本的span节点。然后,在循环中,我们搜索每个选定的div的最近的span父节点,并删除它。
发布于 2013-11-04 14:46:12
正如建议的那样,regexes不是xml文档操作的最佳工具。使用Linq到XML的示例解决方案:
var xDoc = XDocument.Parse(html);
var spansToRemove = xDoc.Descendants("span")
.Where(s => s.Value.StartsWith("(x)")).ToArray();
foreach (var toRemove in spansToRemove)
{
var element = toRemove;
while (element != null && element.Name != "div")
element = element.Parent;
if (element != null)
element.Remove();
}https://stackoverflow.com/questions/19769945
复制相似问题