Ich habe eine Zeichenfolge, die den inneren Wert eines DIV (mit bearbeitbarem Inhalt) enthält, der von der Clientseite stammt.
In diesem Div gibt es SPAN, P, Table, alles, was man haben kann.
Ich möchte aus dieser Zeichenfolge nur den Wert innerhalb des P-Elements und manchmal innerhalb des TD der Tabellen abrufen (manchmal befindet sich ein P innerhalb des TD, manchmal nicht) und den Wert abrufen, wenn er sich innerhalb eines DIV-Elements befindet .
Die Zeichenfolge kann sein:
string text = @"
<P>
tset if it work
<SPAN onresizestart="return false" ondrag=javascript:dragActif(); contentEditable=false style="BACKGROUND-COLOR: #c0d4e6" edth_type="var" edth_var_pob="n" edth_var_pgm="RBLZVALO" edth_var_def="B" edth_var_casse="car" edth_var_lg="050" edth_var_type="c" edth_var_nom="Adr_Leg_Lig1" edth_var_lib="Ligne 1 adresse légale" edth_var_libc="Adr_Leg_Lig1" edth_var_num="1" edth_var_posFich="0">
Adr_Leg_Lig1
</SPAN>
test
</P>
<P>This <FONT size=2 edth_sizeUTIA4="8">should</FONT> Work
</P>"
Ich habe versucht, es mit XML zu analysieren
XmlDocument xd = new XmlDocument();
xd.LoadXML(text);
Aber es ist fehlgeschlagen, ich versuche es damit in HTML zu analysieren ParseHTML aber es auch gescheitert.
Ich habe versucht, jede Möglichkeit mit Regex zu filtern, aber manchmal müssen wir das nehmen, was sich in <FONT>
befindet, wie in diesem Beispiel, manchmal nicht.
Gibt es eine Möglichkeit, dies mit ASP.NET auf der Serverseite in HTML zu konvertieren oder in eine Art XML zu konvertieren, mit der ich es mit seinem Tag und Attribut innerhalb des Tags bearbeiten kann?
BEARBEITEN: ASP.NET 2.0, IE5, No Jquery (also IE5) sind meine Konfiguration, ich kann keine externen Bibliotheken verwenden.
4 Antworten
Das Parsen von HTML-Dosen ist im Allgemeinen schwierig und es gibt viele Randfälle, an die man denken sollte. Daher würde ich die Verwendung einer externen Bibliothek wie HTMLAgilityPack empfehlen. Wenn Ihr Client keine externen Bibliotheken zulässt, können Sie einfach den Quellcode dafür herunterladen und die relevanten Projekte in Ihre Lösung aufnehmen.
Mit HTMLAgilityPack und dem folgenden Codefragment erhalte ich folgende Ausgabe:
test if it work test
this should Work
Möglicherweise müssen Sie nach zusätzlichen Elementen filtern und den XPath-Ausdruck genauer anpassen.
using System;
using System.Linq;
using HtmlAgilityPack;
namespace MongoDB
{
public class Program
{
public static void Main()
{
string text =
"<p>tset if it work <span onresizestart=\"return false\" ondrag=javascript:dragActif(); contenteditable=false style=\"BACKGROUND-COLOR: #c0d4e6\" edth_type=\"var\" edth_var_pob=\"n\" edth_var_pgm=\"RBLZVALO\" edth_var_def=\"B\" edth_var_casse=\"car\" edth_var_lg=\"050\" edth_var_type=\"c\" edth_var_nom=\"Adr_Leg_Lig1\" edth_var_lib=\"Ligne 1 adresse légale\" edth_var_libc=\"Adr_Leg_Lig1\" edth_var_num=\"1\" edth_var_posfich=\"0\">Adr_Leg_Lig1</span> test</p><p>This <font size=2 edth_sizeutia4=\"8\">should</font> Work</p>";
HtmlDocument html = new HtmlDocument();
html.LoadHtml(text);
var nodes = html.DocumentNode.SelectNodes("//p");
foreach (
var line in
nodes.Select(node => node.ChildNodes.Where(childNode => childNode.Name!="span"))
.Select(
textNodes => textNodes.Aggregate(String.Empty, (current, node) => current + node.InnerText))
)
{
Console.WriteLine(line);
}
}
}
}
Es ist unwahrscheinlich, aber wenn Sie den von Ihnen angegebenen Code verwenden, können Sie einige geringfügige Änderungen vornehmen
string text = "<ME><P>tset if it work <SPAN onresizestart='return false' ondrag='javascript:dragActif();' contentEditable='false' style='BACKGROUND-COLOR: #c0d4e6' edth_type='var' edth_var_pob='n' edth_var_pgm='RBLZVALO' edth_var_def='B' edth_var_casse='car' edth_var_lg='050' edth_var_type='c' edth_var_nom='Adr_Leg_Lig1' edth_var_lib='Ligne 1 adresse légale' edth_var_libc='Adr_Leg_Lig1' edth_var_num='1' edth_var_posFich='0'>Adr_Leg_Lig1</SPAN> test</P><P>This <FONT size='2' edth_sizeUTIA4='8'>should</FONT> Work</P></ME>";
XDocument xd = XDocument.Parse(text);
Ich musste es mit einem Unsinn-Tag (<ME>
) umschließen, sonst hat es mehrere Wurzeln
Ich musste auch sicherstellen, dass Sie nach =
2 '
'
haben! zB hatte dein Original:
This <FONT size=2
Wo ich verwendet habe
This <FONT size='2'
Screenshot mit dem XML-Visualizer
HTML ist normalerweise kein gültiges XML. Sie müssen einen Parser verwenden, der HTML aus Zeichenfolgen analysieren kann, aus denen Sie Inhalte extrahieren können.
Ich mache viel Web-Scraping und habe festgestellt, dass CSQuery den Trick gut macht. Es konvertiert HTML in ein speicherinternes DOM, das mit Funktionen / Selektoren abgefragt werden kann, genau wie die von jQuery bereitgestellten.
In diesem Thread erfahren Sie, wie Sie eine HTML-Datei mit einem regulären Ausdruck oder mit dem Agility Pack analysieren: Wie entferne ich alle HTML-Tags aus einem String, ohne zu wissen, welche Tags darin enthalten sind?
Verwandte Fragen
Neue Fragen
c#
C # (ausgesprochen "siehe scharf") ist eine statische Typisierungsprogrammiersprache mit mehreren Paradigmen, die von Microsoft entwickelt wurde. C # -Code zielt normalerweise auf die .NET-Tools und -Laufzeiten von Microsoft ab, zu denen unter anderem .NET Framework, .NET Core und Xamarin gehören. Verwenden Sie dieses Tag für Fragen zu Code, der in der formalen Spezifikation von C # oder C # geschrieben ist.