sagt, dass ich ein HTML-Dokument wie diese:HtmlAgilityPack C# Verschachtelte divs
<!DOCTYPE html>
<html>
<head>
<title>MyTest</title>
</head>
<body>
<div id="p_123">
MyText Here
<div id="p_456">
MyText Again
</div>
</div>
</body>
</html>
Ich versuche, es zu analysieren, mit HtmlAgilityPack einen Ersatz Regex verwenden, die für die Hervorhebung des Suchtext in einem span-Tag umschließt. So sollte die resultierende markierten Text wie folgt aussehen:
<!DOCTYPE html>
<html>
<head>
<title>MyTest</title>
</head>
<body>
<div id="p_123">
<span class="highlighted">MyText</span> Here
<div id="p_456">
<span class="highlighted">MyText</span> Again
</div>
</div>
</body>
</html>
Das Problem ist, wenn ich Schleife durch die divs, ich Hervorhebung am Ende auf div p_456
zweimal da p_123
auch p_456
enthält. Das tatsächliche Ergebnis sieht wie folgt aus:
<!DOCTYPE html>
<html>
<head>
<title>MyTest</title>
</head>
<body>
<div id="p_123">
<span class="highlighted">MyText</span> Here
<div id="p_456">
<span class="highlighted"><span class="highlighted">MyText</span></span> Again
</div>
</div>
</body>
</html>
Und ich bin mit Code, der wie folgt aussieht:
HtmlDocument doc = new HtmlDocument();
doc.Load(someDataStream);
foreach (HtmlNode n in doc.DocumentNode)
{
string evaluator = m => "<span class=\"highlighted\">" + m.Value + "</span>";
n.InnerText = Regex.Replace(n.InnerText, "MyText", evaluator);
}
Gibt es eine Möglichkeit, so dass, wenn ich die Innertext von p_123
wählen es gibt mir nur die Text "MeinText hier"? Ohne das andere div? Oder gibt es einen anderen Weg, es zu tun?