Autor Beitrag
DeTomaso33
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52
Erhaltene Danke: 1

Windows10
C#,HTML,CSS3,Javascript
BeitragVerfasst: Do 21.01.16 16:27 
Liebe Leser,

ich habe auf w3schools ein Tutorial gefunden, in dem ein gegebenes Xml-Dokument mit dazugehörigem xslt-Quellcode mit einem Realtime-Compiler als html dargestellt wird. Schön und gut, aber wenn ich diesen Verarbeitungs-schritt des Zusammensetzens der beiden Dokumente zum html selber mit VisualStudio in C# programmieren möchte,finde ich keine adäquate Anleitung...

Es fängt an mit der Auswahl des Typs des Projektes. Da eine html-Seite erzeugt werden soll, nehme ich in der Auswahl aus dem Verzeichnis Visual C#/Internet die Option "Leere ASP.Net-Webanwendung" und erhalte eine erzeugte Projektmappe mit meinem Verzeichnis (Name für WebApplication)mit Inhalt: Unterverzeichnisse Properties,Verweise und Web.Config. Die html-Seite muss ich selber hinzufügen.

Den Xml-Reader verwende ich später, um die xml-Datei einzulesen. Wo packe ich den xslt-Inhalt gespeichert in einer xsl-Datei hin ? :?: Auf die html-Seite ? Ich habe auf Youtube eine Anleitung (leider ohne Ton) gesehen, wo eine Seite mit speziellem xsl-Header gezeigt wurde mit body vom html. Wie die Seite erzeugt wurde wird leider übersprungen (auch wenn ich die Tonspur später höre, der Step ist nicht gegeben.)

Kennt jemand ein gutes Tutorial für die Programmierung in C# für dieses Problem ? :?:
Eine Suche hier im Forum war auch erfolglos.

Danke für eine baldige nützliche Antwort!

mfg
DeTomaso33


Zuletzt bearbeitet von DeTomaso33 am Fr 22.01.16 09:43, insgesamt 1-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4063
Erhaltene Danke: 843

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Do 21.01.16 16:57 
Hallo,

verstehe ich das richtig, daß du aus einer XML-Datei mittels einer XSLT-Datei eine HTML-Datei erzeugen möchtest?
Dann schau dir mal Introduction to XML and XSLT in C# .NET (unter "XML to HTML using XSLT") an.
Ähnlichen Code gibt es unter Using XSLT and .NET to Manipulate XML Files.

Soll diese HTML-Seite dann gleich online über einen Browser abrufbar sein (d.h. mittels eines Web-Services)? Denn nur dann benötigst du ein ASP.Net-Projekt - für eine lokale HTML-Datei kannst du ein beliebiges Konsolen- oder Desktop- (WinForms, WPF) Projekt verwenden.

Für diesen Beitrag haben gedankt: DeTomaso33
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4434
Erhaltene Danke: 909


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 21.01.16 17:11 
Dein Controller sollte das HTML deiner Transformation ausliefern.
Dazu (ich gehe einfach mal davon aus das du Asp.Net MVC verwendest) einfach in der entsprechenden Controllermethode das xml sowie das xslt durch XslCompiledTransform jagen und den Output(eben das HTML) von der Methode returnen lassen.

Für diesen Beitrag haben gedankt: DeTomaso33
DeTomaso33 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52
Erhaltene Danke: 1

Windows10
C#,HTML,CSS3,Javascript
BeitragVerfasst: Fr 22.01.16 10:39 
Hi!

Danke für die Links! Der von Ralf realisiert in einem schönen kurzen Programm die Transformation. Das sieht brauchbar aus. Ich weiß nur nicht welcher Controller gemeint ist. Oder ist der Konstruktor XslCompiledTransform gemeint? :?:

Ich werde beide Lösungsvorschläge von Ralf und von Th69 mal ausprobieren und melde mich dann wieder...

Antwort für Th69: Genau, Du hast mein Problem erkannt! Bei Deinem Link wird nur leider nicht namentlich die verwendete Anwendung benannt. Der Screenshot unter "Using the code" läßt diesen Fakt unerklärt; einzig das Design des Ausschnitts läßt auf eine ältere Windows-Version (also auch ein älteres Programm)schließen. :roll: Okay ich sollte ja auch erst weiter unten lesen. Ich beziehe nur gern den vorhergehenden Text bei der Erfassung einer Erklärung mit ein, weil dort auch nützliche Informationen für das weitere Verständnis versteckt sein können.

mfg
DeTomaso33
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4434
Erhaltene Danke: 909


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 22.01.16 10:46 
Zitat:
Danke für die Links! Der von Ralf realisiert in einem schönen kurzen Programm die Transformation. Das sieht brauchbar aus. Ich weiß nur nicht welcher Controller gemeint ist.


Du wolltest ein Webseitenprojekt starten da ging ich davon aus das du auch eine echte Webseite erstellen willst die das Html veröffentlicht und zwar so das beim Abruf einer Seite das Html aus Xml/Xslt erstellt wird. Da wäre der von mir genannte Weg eine Möglichkeit. Der Controller ist eine Komponente von ASP.Net MVC. Wenn du gar keine Webseite erstellen willst oder eine andere Technik als Asp.Net MVC verwenden möchtest ignorier das mit dem Controller.
DeTomaso33 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52
Erhaltene Danke: 1

Windows10
C#,HTML,CSS3,Javascript
BeitragVerfasst: Mo 25.01.16 14:31 
Hi,

hatte am Wochenende keine Zeit weiterzuarbeiten. Ich habe mir zwischenzeitlich vier Videos auf Youtube angeschaut, die alle für die Suchanfrage xml per xsl,xslt zu html waren. Die Verarbeitung der Elemente der xml-Daten ist mir klar und das war leider zu 95% der Inhalt.Das fertige html wurde einfach so eingeblendet.
Ich habe im VisualStudio ein leeres Asp.Net MVC3 gestartet. Ist schon etwas länger her,dass ich damit gearbeitet habe. Ich habe einen leeren Controller hinzugefügt und 'Home' genannt(s.Anhang). Bei den Views meine ich mich zu erinnern, dass die Datei _ViewStart.cshtml besser in index.cshtml umgenannt wird, weil das Programm sonst nicht läuft oder verwechsele ich da was? :?:

Mir ist nicht klar wo ich diese Programmzeilen aus dem Hinweis von Ralf einzubauen habe?


// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("output.xsl");

// Execute the transform and output the results to a file.

xslt.Transform("books.xml", "books.html");

Ich betrete hier Neuland und tue mich schwer mit der Umsetzung,da es gerade der Anfang ist, der für mich im Nebel liegt. Um das w3schoolBeispiel umzusetzen, habe ich die Dateien CD-Liste.xml und cd-list.xsl erstellt.

mfg
DeTomaso33
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von DeTomaso33 am Mo 25.01.16 16:29, insgesamt 1-mal bearbeitet
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4434
Erhaltene Danke: 909


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 25.01.16 15:56 
Etwa so. Ist zwar nicht die hohe leere das Html vom Controller erzeugen zu lassen anstatt vom View aber sollte so (oder ähnlich) funktionieren.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public ActionResult Index()
{
    XslCompiledTransform xslt = new XslCompiledTransform();
    xslt.Load("output.xsl");
    using (StringWriter writer = new StringWriter())
    {
        xslt.Transform("books.xml"null, writer);
        return Content(writer.ToString());
    }
}
DeTomaso33 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52
Erhaltene Danke: 1

Windows10
C#,HTML,CSS3,Javascript
BeitragVerfasst: Mo 25.01.16 16:25 
Hallo,

ich hatte das gerade so probiert (s.Anhang), da jeweils die xsl und xml-Datei über den Pfad geholt werden soll. Wo ist denn bei Deinem Code das Ziel-html geblieben? :?: Ich habe das einfach Ergebnis.html genannt, den Pfad muss ich noch ergänzen.

mfg
DeTomaso33 :)
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4434
Erhaltene Danke: 909


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 25.01.16 21:23 
Zitat:
Wo ist denn bei Deinem Code das Ziel-html geblieben?


Nirgendwo die gibts nur im Speicher (hinterm StringWriter ;) ) und wird beim Aufruf der Url im Browser an diesen gesendet.
DeTomaso33 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52
Erhaltene Danke: 1

Windows10
C#,HTML,CSS3,Javascript
BeitragVerfasst: Di 26.01.16 11:47 
Hi,weiter geht's!

Ich habe das mal so geändert nach Deiner Vorlage Ralf und erhalte eine XslLoadException (s.Anhang). Ich habe mir den xml-Aufbau nochmal angesehen und beigefügt(xml-Inhalt). Ich entdecke aber nicht, wo beim ersten Knoten ein leeres Element sein soll (s. Fehler Knoten Meldung).

Mir ist auch nicht ganz klar wie das html aufgerufen wird.Klar ist, dass der return in Zeile 25 den content(writer.ToString())zurückgibt. Es gibt doch nur die zwei Möglichkeiten.
1.Erstens ich habe eine Webapplication und starte das Debugging und die debuggte index.html erhält vom Debugger eine Localhost-Adresse in der Browser-Adresszeile.

2.Zweitens ich habe eine URL wie z.B.: 123.123.0.0, die ich in die Browser-Adresszeile eingebe. Darauf wird die Seite (soweit existent) geladen. Wenn ich aber die Adresse nicht habe, wie soll dann der Inhalt abgefragt und vom Browser geladen werden? :?:

Gruß DeTomaso33
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4434
Erhaltene Danke: 909


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 26.01.16 13:27 
Enthält dein xsl, xml denn eine xml Deklaration? Also eine Zeile am Anfang ähnlich <?xml version="1.0" encoding="UTF-8"?>? Ohne ist es kein gültiges xml.
Zitat:
1.Erstens ich habe eine Webapplication und starte das Debugging und die debuggte index.html erhält vom Debugger eine Localhost-Adresse in der Browser-Adresszeile.

In ASP.NET Mvc gibt es dieses html nicht (nicht unbedingt). Du rufst über eine url eine Controller Methode die liefert html. Ob die von der Platte aus einer Datei oder sonstwoher kommt ist egal.
Zitat:
Zweitens ich habe eine URL wie z.B.: 123.123.0.0, die ich in die Browser-Adresszeile eingebe. Darauf wird die Seite (soweit existent) geladen. Wenn ich aber die Adresse nicht habe, wie soll dann der Inhalt abgefragt und vom Browser geladen werden? :?:

Ohne Adresse bekommst du nie was. Ich verstehe die Frage nicht.

Du hattest mal ein Bild von deinem Home Controller gezeigt (Ist übrigens doof Copy&Paste des Code wäre für dich und uns deutlich einfacher als Bilder) . Wenn der local bei dir läuft wäre die Index Methode über localhost/Home/Index zu erreichen. Als Routingshortcut ginge auch localhost/Home oder localhost/. Du kannst aber das Routing auch steuern und weitere Wege zu der Controller Methode definieren. Aber irgendeine Adresse mußt du kennen. Du wärst ja auch nicht hier wenn du unsere url nicht kennen würdest ;)
DeTomaso33 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52
Erhaltene Danke: 1

Windows10
C#,HTML,CSS3,Javascript
BeitragVerfasst: Di 26.01.16 15:03 
Hallo!
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
Wo ist denn bei Deinem Code das Ziel-html geblieben?


Nirgendwo die gibts nur im Speicher (hinterm StringWriter ;) ) und wird beim Aufruf der Url im Browser an diesen gesendet.


Meine Punkte 1. und 2. beziehen sich auf den Aufruf. Der kann aktiv (2.)oder indirekt (1.)als automatisierte Folge des Debuggings erfolgen. Welcher Fall ist denn jetzt gegeben? :?:
Normalerweise sollen doch xml und xsl zum html zusammengeführt werden. Nur wenn ich mich auf das Zitat beziehe, die Url bleibt doch intern - also nicht sichtbar. Wenn die html-Datei nur im Speicher ist, habe ich ja gar keine Datei-Infos. Wie sage ich denn zu einem anderen Zeitpunkt dem Speicher ohne die Zusammenführung noch mal zu starten,dass er mir die gewünschte html-Datei liefert? :?: Die soll doch irgendwo abgelegt werden.Hinzu kommt noch ein neues Problem,das ich noch nicht recherchiert habe: Wie kann ich bei der Zusammenführung von xml und xsl noch Bilder(+Positionsangabe) hinzufügen?

mfg DeTomaso33
DeTomaso33 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52
Erhaltene Danke: 1

Windows10
C#,HTML,CSS3,Javascript
BeitragVerfasst: Di 26.01.16 15:16 
Hallo nochmal!

Ich weiß, mit den Bildern das ist nicht optimal. Man muss immer hin und her springen,wenn man noch mal nach Details gucken möchte. Ralf Du hast anscheinend mein xml-Inhaltsbild nicht gesehen. Da ist die entsprechende xml (Start-)Deklaration vorhanden. :oops: Das ist schon okay soweit.

Danke für die localhost Darlegung!

Jetzt will ich mal keine Haarspalterei betreiben bzgl. :P dem letzten Satz....
wenn du unsere url nicht kennen würdest
Kenne ich eigentlich auch nicht,aber dafür gibts ja die NAT-(NameAdressTranslation)Einrichtung!

Mein Problem ist der erste Knoten...

mfg
DeTomaso33
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4434
Erhaltene Danke: 909


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 26.01.16 22:56 
Zitat:
Meine Punkte 1. und 2. beziehen sich auf den Aufruf. Der kann aktiv (2.)oder indirekt (1.)als automatisierte Folge des Debuggings erfolgen. Welcher Fall ist denn jetzt gegeben? :?:


Sorry verstehe ich nicht. Woher der Aufruf der url kommt ist doch egal. Der Aufruf der url liefert dir html, Punkt.
Oder willst du doch keine Webseite sondern einfach nur das fertig gerenderte Html als Datei?

Zitat:
Normalerweise sollen doch xml und xsl zum html zusammengeführt werden. Nur wenn ich mich auf das Zitat beziehe, die Url bleibt doch intern - also nicht sichtbar. Wenn die html-Datei nur im Speicher ist, habe ich ja gar keine Datei-Infos.


Wieso ist die intern? Pack den Code auf einen öffentlichen Webserver und jeder kann das abrufen.
Ein url Aufruf ist kein Abruf einer Datei. Es ist ein Aufruf an einen Webservers. Bei einer statischen Webseite liefert der dann oft einfach eine Datei aus das ist aber nur eine Möglichkeit.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4063
Erhaltene Danke: 843

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Mi 27.01.16 12:45 
Hallo DeTomaso33,

bitte erkläre jetzt genau, in welcher Form du die HTML-Daten benötigst, als (lokale) Datei oder über einen WebService abrufbar.

Ansonsten schließe ich dieses Thema.
DeTomaso33 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52
Erhaltene Danke: 1

Windows10
C#,HTML,CSS3,Javascript
BeitragVerfasst: Mi 27.01.16 13:28 
Hallo,

die html-Seite kann ohne Webservice local auf einem Server abgelegt werden. Das ist das Ziel.

Mit "intern" meinte ich nicht Firmenintern, sondern,da das return content sich nur auf den writer bezieht, das Programm,das die Url praktisch verschluckt. In der Browseradresszeile steht ja nur localhost:34577 oder so...

mfg
DeTomaso33


Zuletzt bearbeitet von DeTomaso33 am Mi 27.01.16 15:45, insgesamt 1-mal bearbeitet
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4434
Erhaltene Danke: 909


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 27.01.16 13:35 
Dann mach dir einfach eine Konsolenanwendung mit dem Code aus der Hilfe zu XslCompiledTransform und vergiss das ganze Webseitenzeug.

Für diesen Beitrag haben gedankt: DeTomaso33
DeTomaso33 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52
Erhaltene Danke: 1

Windows10
C#,HTML,CSS3,Javascript
BeitragVerfasst: Mi 27.01.16 16:00 
Hallo,

ich denke das ist ein brauchbarer Ansatz mit der Konsole-Anwendung. Habe gerade noch mal einen Bekannten gucken lassen und der hat festgestellt,dass in der xml Datei ein Endtag fehlte, weshalb die Fehlermeldung mit dem ersten Knoten kam...trotzdem kommt immer noch die Fehlermeldung (s.Anhang). :roll:

Hallo Th69,

bist Du der Meinung, dass ich sonst alles Nötige habe, um mein html erzeugen zu lassen? :?: Für meine Fehlermeldungen würde ich dann ein separates Thema eröffnen.

Wer mal einen Blick auf das xml werfen möchte, das folgt hier (Teilstück)!
ausblenden volle Höhe XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
<?xml version="1.0" encoding="UTF-8"?>
<root xml-stylesheet type="text/xsl"
                              version="2.0"
                              href="cd-list.xsl">
<catalog>
  <cd>
     <title>Greatest Hits</title>
      <artist>Bon Jovi</artist>
     <country>USA</country>
     <company>RCA</company>
     <price>9.90</price>
     <year>2006</year>
   </cd>
  <cd>
    <title>Whereever,whenever</title>
    <artist>Shaquira</artist>
    <country>Brasil</country>
     <company>Virgin records</company>
    <price>11.99</price>
     <year>1996</year>
  </cd>
  <cd>
    <title>Unchain my heart</title>
    <artist>Joe Cocker</artist>
    <country>USA</country>
    <company>EMI</company>
    <price>8.20</price>
    <year>1987</year>
  </cd>
</catalog>
</root>


mfg
DeTomaso33

Moderiert von user profile iconTh69: XML-Tags hinzugefügt
Einloggen, um Attachments anzusehen!
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4434
Erhaltene Danke: 909


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 27.01.16 16:14 
Schau dir die Exception mal genauer an (die die du auch als Bild gepostet hast). Insbesondere die inner Exception da stehen bestimmt auch Zeilen/Spalten Infos dabei wo der Fehler im Stylesheet auftritt.
DeTomaso33 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 52
Erhaltene Danke: 1

Windows10
C#,HTML,CSS3,Javascript
BeitragVerfasst: Mi 27.01.16 16:26 
Hallo,

steht im Bild: LineNumber 1
LinePosition 4 und das ist ja der Start!
Wo soll denn in (Kopie) <?xml version="1.0" encoding="UTF-8"?> der Fehler sein? :?: :oops: :cry: Das ist doch die Standard-Zeile!

mfg
DeTomaso33