Quellcode XML Datei

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von NscMike.

    Quellcode XML Datei

    Hi Community,

    Will den Quellcode einer XML Datei auslesen, dabei tritt aber folgendes Problem auf:

    Im Internet Explorer wird der Quellcode richtig angezeigt und zwar so:

    XML-Quellcode

    1. <?xml version="1.0" encoding="ISO-8859-1" ?>
    2. <weareone>
    3. <radio>
    4. <name>TechnoBase</name>
    5. <moderator>Jolly Jumper</moderator>
    6. <show>Control The Beat</show>
    7. <style>HandsUp</style>
    8. <starttime>11</starttime>
    9. <endtime>12</endtime>
    10. <link>http://www.TechnoBase.FM/member/58762</link>
    11. <picture>http://profil.technobase.eu/profil_small58762-5-a875b53b34db8232a0d3a6097a8b407f.jpg</picture>
    12. <artist>Jason Born</artist>
    13. <song>Hey Soul Sister</song>
    14. <release>http://www.TechnoBase.FM/release/6927</release>
    15. <listener>7824</listener>
    16. <url>http://www.TechnoBase.FM</url></radio>
    17. </weareone>


    Wenn ich jetzt aber über das Webbrowser Control den Quelltext ausles und zwar so:

    VB.NET-Quellcode

    1. textbox1.text = WebBrowser1.DocumentText


    kommt folgender Quelltext raus:

    HTML-Quellcode

    1. <HTML><HEAD>
    2. <STYLE>BODY{font:x-small 'Verdana';margin-right:1.5em}
    3. .c{cursor:hand}
    4. .b{color:red;font-family:'Courier New';font-weight:bold;text-decoration:none}
    5. .e{margin-left:1em;text-indent:-1em;margin-right:1em}
    6. .k{margin-left:1em;text-indent:-1em;margin-right:1em}
    7. .t{color:#990000}
    8. .xt{color:#990099}
    9. .ns{color:red}
    10. .dt{color:green}
    11. .m{color:blue}
    12. .tx{font-weight:bold}
    13. .db{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;border-left:1px solid #CCCCCC;font:small Courier}
    14. .di{font:small Courier}
    15. .d{color:blue}
    16. .pi{color:blue}
    17. .cb{text-indent:0px;margin-left:1em;margin-top:0px;margin-bottom:0px;padding-left:.3em;font:small Courier;color:#888888}
    18. .ci{font:small Courier;color:#888888}
    19. PRE{margin:0px;display:inline}</STYLE>
    20. <SCRIPT><!--
    21. function f(e){
    22. if (e.className=="ci"){if (e.children(0).innerText.indexOf("\n")>0) fix(e,"cb");}
    23. if (e.className=="di"){if (e.children(0).innerText.indexOf("\n")>0) fix(e,"db");}
    24. e.id="";
    25. }
    26. function fix(e,cl){
    27. e.className=cl;
    28. e.style.display="block";
    29. j=e.parentElement.children(0);
    30. j.className="c";
    31. k=j.children(0);
    32. k.style.visibility="visible";
    33. k.href="#";
    34. }
    35. function ch(e){
    36. mark=e.children(0).children(0);
    37. if (mark.innerText=="+"){
    38. mark.innerText="-";
    39. for (var i=1;i<e.children.length;i++)
    40. e.children(i).style.display="block";
    41. }
    42. else if (mark.innerText=="-"){
    43. mark.innerText="+";
    44. for (var i=1;i<e.children.length;i++)
    45. e.children(i).style.display="none";
    46. }}
    47. function ch2(e){
    48. mark=e.children(0).children(0);
    49. contents=e.children(1);
    50. if (mark.innerText=="+"){
    51. mark.innerText="-";
    52. if (contents.className=="db"||contents.className=="cb")
    53. contents.style.display="block";
    54. else contents.style.display="inline";
    55. }
    56. else if (mark.innerText=="-"){
    57. mark.innerText="+";
    58. contents.style.display="none";
    59. }}
    60. function cl(){
    61. e=window.event.srcElement;
    62. if (e.className!="c"){e=e.parentElement;if (e.className!="c"){return;}}
    63. e=e.parentElement;
    64. if (e.className=="e") ch(e);
    65. if (e.className=="k") ch2(e);
    66. }
    67. function ex(){}
    68. function h(){window.status=" ";}
    69. document.onclick=cl;
    70. --></SCRIPT>
    71. </HEAD>
    72. <BODY class="st"><DIV class="e">
    73. <SPAN class="b">&nbsp;</SPAN>
    74. <SPAN class="m">&lt;?</SPAN><SPAN class="pi">xml version="1.0" encoding="ISO-8859-1" </SPAN><SPAN class="m">?&gt;</SPAN>
    75. </DIV>
    76. <DIV class="e">
    77. <DIV class="c" STYLE="margin-left:1em;text-indent:-2em"><A href="#" onclick="return false" onfocus="h()" class="b">-</A>
    78. <SPAN class="m">&lt;</SPAN><SPAN class="t">weareone</SPAN><SPAN class="m">&gt;</SPAN></DIV>
    79. <DIV><DIV class="e">
    80. <DIV class="c" STYLE="margin-left:1em;text-indent:-2em"><A href="#" onclick="return false" onfocus="h()" class="b">-</A>
    81. <SPAN class="m">&lt;</SPAN><SPAN class="t">radio</SPAN><SPAN class="m">&gt;</SPAN></DIV>
    82. <DIV><DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    83. <SPAN class="b">&nbsp;</SPAN>
    84. <SPAN class="m">&lt;</SPAN><SPAN class="t">name</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">TechnoBase</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">name</SPAN><SPAN class="m">&gt;</SPAN>
    85. </DIV></DIV>
    86. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    87. <SPAN class="b">&nbsp;</SPAN>
    88. <SPAN class="m">&lt;</SPAN><SPAN class="t">moderator</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">Jolly Jumper</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">moderator</SPAN><SPAN class="m">&gt;</SPAN>
    89. </DIV></DIV>
    90. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    91. <SPAN class="b">&nbsp;</SPAN>
    92. <SPAN class="m">&lt;</SPAN><SPAN class="t">show</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">Control The Beat</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">show</SPAN><SPAN class="m">&gt;</SPAN>
    93. </DIV></DIV>
    94. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    95. <SPAN class="b">&nbsp;</SPAN>
    96. <SPAN class="m">&lt;</SPAN><SPAN class="t">style</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">HandsUp</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">style</SPAN><SPAN class="m">&gt;</SPAN>
    97. </DIV></DIV>
    98. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    99. <SPAN class="b">&nbsp;</SPAN>
    100. <SPAN class="m">&lt;</SPAN><SPAN class="t">starttime</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">11</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">starttime</SPAN><SPAN class="m">&gt;</SPAN>
    101. </DIV></DIV>
    102. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    103. <SPAN class="b">&nbsp;</SPAN>
    104. <SPAN class="m">&lt;</SPAN><SPAN class="t">endtime</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">12</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">endtime</SPAN><SPAN class="m">&gt;</SPAN>
    105. </DIV></DIV>
    106. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    107. <SPAN class="b">&nbsp;</SPAN>
    108. <SPAN class="m">&lt;</SPAN><SPAN class="t">link</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">http://www.TechnoBase.FM/member/58762</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">link</SPAN><SPAN class="m">&gt;</SPAN>
    109. </DIV></DIV>
    110. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    111. <SPAN class="b">&nbsp;</SPAN>
    112. <SPAN class="m">&lt;</SPAN><SPAN class="t">picture</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">http://profil.technobase.eu/profil_small58762-5-a875b53b34db8232a0d3a6097a8b407f.jpg</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">picture</SPAN><SPAN class="m">&gt;</SPAN>
    113. </DIV></DIV>
    114. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    115. <SPAN class="b">&nbsp;</SPAN>
    116. <SPAN class="m">&lt;</SPAN><SPAN class="t">artist</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">Jason Born</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">artist</SPAN><SPAN class="m">&gt;</SPAN>
    117. </DIV></DIV>
    118. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    119. <SPAN class="b">&nbsp;</SPAN>
    120. <SPAN class="m">&lt;</SPAN><SPAN class="t">song</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">Hey Soul Sister</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">song</SPAN><SPAN class="m">&gt;</SPAN>
    121. </DIV></DIV>
    122. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    123. <SPAN class="b">&nbsp;</SPAN>
    124. <SPAN class="m">&lt;</SPAN><SPAN class="t">release</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">http://www.TechnoBase.FM/release/6927</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">release</SPAN><SPAN class="m">&gt;</SPAN>
    125. </DIV></DIV>
    126. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    127. <SPAN class="b">&nbsp;</SPAN>
    128. <SPAN class="m">&lt;</SPAN><SPAN class="t">listener</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">7824</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">listener</SPAN><SPAN class="m">&gt;</SPAN>
    129. </DIV></DIV>
    130. <DIV class="e"><DIV STYLE="margin-left:1em;text-indent:-2em">
    131. <SPAN class="b">&nbsp;</SPAN>
    132. <SPAN class="m">&lt;</SPAN><SPAN class="t">url</SPAN><SPAN class="m">&gt;</SPAN><SPAN class="tx">http://www.TechnoBase.FM</SPAN><SPAN class="m">&lt;/</SPAN><SPAN class="t">url</SPAN><SPAN class="m">&gt;</SPAN>
    133. </DIV></DIV>
    134. <DIV><SPAN class="b">&nbsp;</SPAN>
    135. <SPAN class="m">&lt;/</SPAN><SPAN class="t">radio</SPAN><SPAN class="m">&gt;</SPAN></DIV>
    136. </DIV></DIV>
    137. <DIV class="e">


    Meine Frage nun:

    Wie kriege ich den Quelltext des Internet Explorers in die Textbox?

    bin dankbar für alle hilfen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „NscMike“ ()

    NscMike schrieb:

    Wenn ich jetzt aber über das Webbrowser Control den Quelltext ausles und zwar so

    Du liest ja auch den Quelltext der Seite aus und nicht den der XML-Datei. Das Thema scheint ja ziemlich beliebt zu sein, jedenfalls gibts es hier im Forum schon einige Themen mit Beispielcode , z.B. hier

    Ob Du dann mit XDocument oder XMLDocument arbeitest ist Dir überlassen ...
    Um das Auslesen der XML geht es mir gar nicht!
    Ich würde nur gerne den Quelltext der XML Datei rausbekommen, da ich diesen für andere Zwecke brauche.

    Gibts da ne Möglichkeit?
    Ich mein der Internet Explorer gibt ja den richtigen Quelltext aus.
    Muss ja mit VB auch irgendwie gehen oder?
    Ich glaube ich habe mich nicht deutlich genug ausgedrückt...

    Ich will nichts AUSLESEN!!!
    Weder mit RegEx noch mit sonst was!

    Ich brauche nur den Xml Quellcode und zwar für andere Zwecke!!

    Und es muss doch eine Möglichkeit geben wie man aus dem Webbrowser Control den Quelltext einer in ihm geladenen Xml Datei bekommt.
    in den beiden Links steht nur wie man eine Xml erstellt und wie man sie auslesen kann!

    Ich will aber weder noch!!
    Ich will den kompletten Quellcode der Xml in eine TextBox laden

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „NscMike“ ()

    Man weist du was das ist? Im Browser wird dir der XML Quelltexr angezeigt, wohlmöglich mit Highlightning. Das ist aber nur der SICHTBARE Teil. Dahinter stecht normaler HTML Code der dir das alles Stylt und den bekommst du ja auch richtig ausgegeben.

    Was du nun brauchst ist ein Parser der dir den HTML Code Parsed, damit eben den XML Code herausbekommst.
    Es ist nämlich keine echte XML Datei sondern eine HTML Datei die XML Code DARSTELLT.
    Achso, das wusst ich nicht... :S
    Hab schon nach nem HTML to XML Parser gesucht, bisher aber nix gefunden.
    Könntest mir dabei Infos geben?

    Und ich hab jetzt ein bisschen rumexperimentiert und hätte eine unsaubere Methode für das Problem gefunden.
    Vorraussetzung ist jedoch das die Xml keine Werte mit "-" beinhaltet.

    VB.NET-Quellcode

    1. Dim Quellcode As String = WebBrowser1.Document.Body.OuterText.Replace("-", "").Replace("ISO88591", "ISO-8859-1").Replace(" <?xml", "<?xml").Replace("&", "~")
    2. My.Computer.FileSystem.WriteAllText("C:\test.xml", Quellcode, False)



    Edit: Ich hätte nen Parser gefunden der kostet aber 150$ xD

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „NscMike“ ()

    Eigentlich musste lediglich alle HTML Elemente entfernen.
    Es gibt glaube ich sogar eine Eigenschaft im Browser Control die dir NUR den sichtbaren Text zurück gibt, ohne HTML. Schau mal die Liste durch ab es irgendein sinnvollen Eigenschatfsnamen gibt der dies machen könnte.
    Habe mir jetzt nochmal "replace" angeschaut!
    und ne Lösung gefunden die immer funktioniert!
    Ist zwar nicht die sauberste aber es wäre eine Lösung!

    VB.NET-Quellcode

    1. Dim Quellcode As String = WebBrowser1.Document.Body.OuterText.Replace("- <", "<").Replace(" <", "<").Replace("> ", ">")
    2. My.Computer.FileSystem.WriteAllText("C:\test.xml", Quellcode, False)


    Schon hat man eine 100% funktionierende Xml Datei!
    Warum machst Du hier eigentlich einen solchen Zirkus ? In dem ersten Link den ich Dir angegeben hatte stand drin wie man die XML-Datei mit einem Webclient herunterlädt: genau 1 Zeile Code.

    Diese kannst Du dann ja entweder als Text-Datei mit einem Streamreader einlesen oder als XMLDocument, das war Dir ja überlassen. Die Version als Textdatei ist dann ja auch direkt in die Textbox ladbar - oder nicht ?
    Um das geht es ja, ich will Sie nicht runterladen!!
    Der Webbrowser öffnet die Xml viel schneller als das ich Sie runterladen würde.
    Außerdem hängt der Download teilweise, da der Server manchmal überlastet ist!
    Habe ich doch schon alles getestet!
    Willste es selber testen??
    Hier der Link zur xml:
    tray.technobase.fm/radio.xml

    Und jetzt öffne die Webseite mal alle 5 Sekunden mit nem Webbrowser und dann lad sie mal alle 5 Sekunden herunter.
    Dann wirste sehen das der Download manchmal hengt und das es mit nem Webbrowser schneller geht!
    Ach ist ja auch egal....
    Die Methode über dem Webbrowser finde ich einfach in meinem Fall besser.
    Da ich so mit dem DocumentCompleted Event arbeiten kann.
    Beim DownloadFileCompleted Event kommt bei mir nämlich immer ein Fehler wenn ich parallele Downloads Versuche...

    NscMike schrieb:

    Dann wirste sehen das der Download manchmal hengt und das es mit nem Webbrowser schneller geht!

    Vergleiche es selber:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim wb As New WebBrowser
    4. Dim sw As New Stopwatch
    5. sw.Start()
    6. wb.Navigate("http://tray.technobase.fm/radio.xml")
    7. While wb.ReadyState <> WebBrowserReadyState.Complete : Application.DoEvents() : End While
    8. sw.Stop()
    9. Trace.WriteLine(sw.ElapsedMilliseconds)
    10. End Sub
    11. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    12. Dim wc As New System.Net.WebClient
    13. Dim sw As New Stopwatch
    14. sw.Start()
    15. Dim s As String = wc.DownloadString("http://tray.technobase.fm/radio.xml")
    16. sw.Stop()
    17. Trace.WriteLine(sw.ElapsedMilliseconds)
    18. End Sub
    19. End Class

    Nur sei so gut und lösche den IE Cache zwischen den Versuchen (z.B. mit CCleaner), ansonsten holt sich der WebBrowser nämlich die Datei aus dem internen Cache und ist damit natürlich erheblich schneller.