| 

.NET C# Java Javascript Exception

0
Hallo

Ich habe folgendes HTML.
<p><img title="Windows XP installieren"
src="/image.axd?picture=DSC09099.jpg" alt="Windows XP installieren" /></p>
<p>Sie installiert ihr erstes Windows XP auf einem ganz alten DELL Laptop.</p>
<p>Sie installiert ihr erstes Windows XP auf einem ganz alten DELL Laptop.</p>

Ich will jetzt den Text "Windows XP" durch eine <a href...>Windows XP</a> ersetzen. Das darf aber sicher nicht im <img> Tag passieren. Sonst wird anstelle des Bildes nur noch Schrott angezeigt. Zudem soll "Windows XP" nur EINMAL ersetzt werden.
Ich vermute mal das könnte man mit einem RegEx (C#) machen. Aber wie?
News:
10.10.2009
GENiALi 2,5k 1 2 8
3 Antworten
1
Also wenn Du Code für GENAU dieses Problem suchst, dann geht das so (ungetestet):
private bool replaced = false;

public string ReplaceMatch(Match m)
{
if( replaced )
return m.Groups[0];
replaced = true;
return " <a href=...>"+m.Groups[1]+"</a> ";
}
private string MakeLink(string html)
{
MatchEvaluator ev = new MatchEvaluator(ReplaceMatch);
return Regex.Replace(html, "\s(Windows XP)\s", ev);
}
10.10.2009
DaSpors 4,2k 2 8
Das werde ich mir noch genau anschauen. Bewertung folgt. :-)
GENiALi 10.10.2009
Der Ansatz funktioniert. Jetzt muss ich nur noch im ReplaceMatch die Logik finden die mir prüft ob der Fund in einem <img> oder <a> Tag ist. Dann darf ich nicht Replacen. Sonst schon. :-)
Danke für diesen Hinweis.
GENiALi 11.10.2009
1
Die RegEx für dein Bsp. könnte ggfs. so aussehen:
/>[^<]+(Windows XP)[\w\s]</
FalkP 12.10.2009
Würde der aber nich auch auf <p></p> greifen?
GENiALi 12.10.2009
Dieser RegEx sollte 'Windows XP' finden, wenn es irgendwo zwischen > und < steht (also zwischen zwei Tags), aber nicht innerhalb eines Tags.
FalkP 12.10.2009
Das könnte man aber noch eingrenzen das er nicht zwischen einem <img> und <a> Tag sein darf.
GENiALi 12.10.2009
0
Ich weiss ja nicht wie flexibel der Code sein muss den du sucht.. aber du koenntest dein HTML aufteilen zb in einer Variablen steckt : <p><img title="Windows XP installieren"
src="/image.axd?picture=DSC09099.jpg" alt="Windows XP installieren" /></p> in der anderen der rest dann arbeitest du mit replace und setzt es am ende wieder zusammen
10.10.2009
damy3n 149 1 4
Ich will zur Laufzeit aus Windows XP einen Link machen. Das andere HTML darf ich nicht ändern.
GENiALi 10.10.2009
0
Erstens zu deinem HTML Verständnis Problem ;-)
Natürlich kann man in einem <img>-Tag keine Links setzen. Wozu auch? ...ein <img>-Tag simbolisiert ein einfaches Bild!
Falls du das Bild "anklickbar" machen möchtest, dann gilt dies ja für das gesamte Bild. Aus diesem Grund muß man dann den Link (<a>-Tag) um das <img>-Tag herum setzen.
Also so:
<a href='http://...' alt=''><img src='..'></a>

Aus diesem Hintergrund heraus ist es somit nicht möglich NUR "Windows XP" zu ersetzen bzw. ergäbe es nonsense.

RegEx selbst findest du unter:
using System.Text.RegularExpressions;
Regex myRegex = new Regex([Pattern]);


Grüßle
10.10.2009
Blue 321 1 5
Blue 321 1 5
Das mit dem HTML ist mir schon klar. :-) Wie ich den Regex in C# mache auch. Aber das Pattern für den Regex, dass wird mir ein Rätzel aufgeben. Ich meine, ich darf auch in einem bestehenden <a href..></a> kein Windows XP mit einem Link machen. Das würde den ursprünglichen Link auch zerschiessen.
GENiALi 10.10.2009

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH