使用CsQuery将DOM元素替换为不同的元素

时间:2015-01-13 19:07:48

标签: c# html dom-manipulation csquery

A有一个包含链接列表的HTML文档:

  <div class="toc">
     <ul class="content_list">
        <li><a href="...">Chapter 1</a></li>
        <li><a href="...">Chapter 2</a></li>
        <li><a href="...">Chapter 3</a></li>

是否有办法(使用CsQuery)删除锚标记或用不同的元素(例如<span>)替换它们,同时保留文本?

结果应该是这样的:

  <div class="toc">
     <ul class="content_list">
        <li>Chapter 1</li>

或者像这样:

  <div class="toc">
     <ul class="content_list">
        <li><span>Chapter 1</span></li>

1 个答案:

答案 0 :(得分:4)

var cq = new CsQuery.CQ(@"<div class=""toc""><ul class=""content_list"">
        <li><a href=""..."">Chapter 1</a></li>
        <li><a href=""..."">Chapter 2</a></li>
        <li><a href=""..."">Chapter 3</a></li>
</ul></div>");

cq[".toc > .content_list > li > a"]
    .Select(x => x.Cq())
    .ToList().ForEach(x => x.ReplaceWith(x.Text()));
    //or with a span wrapper
    //.ToList().ForEach(x => x.ReplaceWith(new CsQuery.CQ("<span/>").Text(x.Text())));

cq.Html().Dump();

这产生:

<ul class="content_list">
    <li>Chapter 1</li>
    <li>Chapter 2</li>
    <li>Chapter 3</li>
</ul>