私は、特定のウィジェットに関連する頭部スクリプトを置き換えています。私はコメントの間にあるそのウィジェットに関連するすべてのノードを見つけることができるようにしたい。また、指定したウィジェットに関連するコード(開始コメントと終了コメントを含む)を簡単に削除したいと思います。
挿入と削除のコードは次のようになります:
<!-- WidgetScript_WidgetName -->
<script src="Widgets/jquery.somecode.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$('.someid).dothis({parameter, avatar_size: 48, count: 6});
});
</script>
<link href="Widgets/jquery.somecode.css" media="all" rel="stylesheet" type="text/css"/>
<!--WidgetScript_WidgetName End-->
以下を使用してください。
var startNode = document.DocumentNode.SelectSingleNode("//comment()[contains(., 'WidgetScript_WidgetName')]");
var endNode = document.DocumentNode.SelectSingleNode("//comment()[contains(., 'WidgetScript_WidgetName End')]");
int startNodeIndex = startNode.ParentNode.ChildNodes.IndexOf(startNode);
int endNodeIndex = endNode.ParentNode.ChildNodes.IndexOf(endNode);
var nodes = startNode.ParentNode.ChildNodes.Where((n, index) => index >= startNodeIndex && index <= endNodeIndex).Select(n => n);
私はこのようなことを示唆しています:
var head = document.DocumentNode.SelectSingleNode("html/head");
var nodes = new List<HtmlNode>();
bool isComment = false;
foreach (var node in head.ChildNodes.ToList())
{
if (node.NodeType == HtmlNodeType.Comment &&
node.InnerText.Contains("WidgetScript_WidgetName"))
{
isComment = !isComment;
node.Remove();
}
else if (isComment)
{
nodes.Add(node);
node.Remove();
}
}
Console.WriteLine(head.InnerHtml);
これにより、2つのコメント(およびコメント自体)の間のすべてのノードが削除されます。