首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据父div内的符号删除父div?

问如何根据父div内的符号删除父div?
EN

Stack Overflow用户
提问于 2013-11-04 14:31:11
回答 2查看 222关注 0票数 2

可以删除具有(x)符号(包括父div )的项。

代码语言:javascript
复制
<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>

移除后必须是

代码语言:javascript
复制
<div>
    <div>
        <h2 id="-663241532">
            <span>Item 1</span>
        </h2>
        <p>Content 1</p>
     </div>
</div>

我写了这个regex

代码语言:javascript
复制
@"<div>(.*?)<span>\(x\)(.*?)</span>(.*?)</div>"

但它也删除了第一个div。

我有身份证-663241532,如果有帮助的话。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-04 14:51:02

我建议您使用HtmlAgilityPack (可从NuGet获得)来使用HTML:

代码语言:javascript
复制
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父节点,并删除它。

票数 3
EN

Stack Overflow用户

发布于 2013-11-04 14:46:12

正如建议的那样,regexes不是xml文档操作的最佳工具。使用Linq到XML的示例解决方案:

代码语言:javascript
复制
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();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19769945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档