从angleSharp元素获取Xpath



是否有明确的方法来检索angleSharpIElementxPath

我正试图将IElement传递给javaScript函数,因此我需要一种方法将angleSharp元素转换为javaScript-Dom元素

function selectLevels(element, name, level){
document.querySelectorAll("*").forEach(e => {
if(e.isEqualNode(element)){
e.setAttribute('level', level); 
e.setAttribute('title', name);
}
})
}

我想通过传递下面C#代码中的一个元素来调用页面中的这个javaScript函数,但我从页面中得到了一个angleSharp not found错误。

IElement element = mainDoc.QuerySelector("strong");
Page.ClientScript.RegisterStartupScript(this.GetType(), "SelectLevel", "selectLevels('" + element + "', '" + name + "', '" + level + "')", true);

如果您有一个带有JavaScript代码的HTML文档,并且希望从C#调用JavaScript代码中的(全局(函数,那么以下示例适用于AngleSharp 0.15和AngleSharp.Js 0.14:

static async Task Main()
{
var html = @"<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script>
function selectLevels(element, name, level){
element.dataset.level = level;
element.dataset.title = name;
}
</script>
</head>
<body>
<h1>Test</h1>
<section data-level=1 data-title='section 1'>
<h2>Section test</h2>
</section>
</body>
</html>";
var jsService = new JsScriptingService();
var config = Configuration.Default.With(jsService);
var context = BrowsingContext.New(config);
var document = await context.OpenAsync(req => req.Content(html));
var selectLevels = jsService.GetOrCreateJint(document).GetValue("selectLevels");
var jsElement = JsValue.FromObject(jsService.GetOrCreateJint(document), document.QuerySelector("section"));
selectLevels.Invoke(jsElement, "2", "section 2");
Console.WriteLine(document.DocumentElement.OuterHtml);
}

因此,基本上,您可以用例如jsService.GetOrCreateJint(document).GetValue("selectLevels");获得函数,并用其Invoke方法调用它,为简单类型传递字符串参数,并用JsValue.FromObject(例如JsValue.FromObject(jsService.GetOrCreateJint(document), document.QuerySelector("section"))(转换IElement

最新更新