0

我在 C# 项目中使用 CsQuery。作为一个简单的例子,我有一个 p-Tag,其中有一个嵌套的 b-​​Tag:

<p>Lorem ipsum dolor sit amet, sanctus <b>TEST</b> Lorem ipsum dolor sit amet.</p>

我需要使用另一种方法 (louis()) 修改每个标签中的纯文本,即 p-Tag 和 b-Tag 内的文本:

IDomObject htmlelement = dom.Get(i);
if (!(htmlelement.FirstElementChild == null))
{
    string test = htmlelement.InnerHTML;
    //test: Lorem ipsum dolor sit amet, sanctus <b>TEST</b> Lorem ipsum dolor sit amet.
    STDIN = htmlelement.FirstElementChild.InnerText;
    OUTPUT = louis(command, param, STDIN);
    htmlelement.FirstElementChild.InnerText = OUTPUT;

    STDIN = htmlelement.InnerText;
    OUTPUT = louis(command, param, STDIN);
    htmlelement.InnerText = OUTPUT;
    test = htmlelement.InnerHTML;
    //test now loses the nested <b>TEST</b>
    //test: Lorem ipsum dolor sit amet, sanctus  Lorem ipsum dolor sit amet.
}

当我尝试(仅)用新文本替换 p-Tag 内的文本时,嵌套的 b-​​Tag 会丢失。我该如何防止这种情况发生,我确信有更好的方法来操作嵌套元素,因为它是一个强大的框架。我只是还没有弄清楚。

4

1 回答 1

3

CsQuery 的发布版本中存在一个错误InnerText......请参阅https://github.com/jamietre/CsQuery/issues/82

要么使用Text()方法,这是一种CQ方法,因此您需要将元素包装在CQ对象中,例如

STDIN = htmlelement.FirstElementChild.Cq().Text();

..或更新到 nuget 上的当前预发布版本 1.3.5 beta 5 以解决此问题:http ://www.nuget.org/packages/CsQuery/1.3.5-beta5

最谦虚的道歉,这在发布版本中保留了这么长时间,现在已经有一年了!

于 2014-02-23T00:37:31.013 回答