SVG – Learning by Coding
1: <?xml version="1.0" encoding="UTF-8"
2: <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
3: "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
4: <!ATTLIST svg xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
5: ]>
6:
7: <!-- SVG - Learning by Coding - http://www.datenverdrahten.de/svglbc/ -->
8: <!-- Author: Dr. Thomas Meinike 11/02 - thomas@handmadecode.de -->
9:
10: <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
11: onload="Init(evt)">
12:
13: <title>ASV-Funktion parseXML()</title>
14: <desc>XML-Inhalte mittels ASV-Funktion parseXML() in SVG einbinden</desc>
15:
16: <defs>
17: <script type="text/javascript">
18: <![CDATA[
19:
20: var svgdoc,svgroot,context,xmldoc,svgns,ver="";
21:
22: function Init(load_evt)
23: {
24: svgdoc=load_evt.target.ownerDocument;
25: svgroot=svgdoc.rootElement;
26: svgns="http://www.w3.org/2000/svg";
27:
28: // Version des SVG Viewers ausgeben
29: if(window.getSVGViewerVersion)
30: {
31: ver=getSVGViewerVersion();
32: svgdoc.getElementById("version").firstChild.nodeValue+=ver;
33: }
34: }
35:
36: function TextHover(obj,color,decor)
37: {
38: obj.target.style.setProperty("fill",color,"");
39: obj.target.style.setProperty("text-decoration",decor,"");
40: }
41:
42: function LadeXML(evt)
43: {
44: if(ver.indexOf("Adobe")!=-1 && window.getURL)
45: {
46: context=evt.target.ownerDocument;
47: getURL("objekte.xml",callback);
48: }
49: else alert("Diese Technik ist nicht verfuegbar!");
50: }
51:
52: function callback(urlRequestStatus)
53: {
54: /*
55: Rueckgabewerte des Objektes urlRequestStatus:
56: - urlRequestStatus.success;
57: - urlRequestStatus.contentType;
58: - urlRequestStatus.content;
59: */
60:
61: if(urlRequestStatus.success)
62: {
63: if(ver.indexOf("Adobe")!=-1)
64: {
65: if(ver.indexOf("6.0")!=-1)xmldoc=parseXML(urlRequestStatus.content);
66: else xmldoc=parseXML(urlRequestStatus.content,context);
67: // eingelesene XML-Daten ausgeben:
68: // alert(printNode(xmldoc));
69: }
70:
71: // Kreis-Informationen aus XML-Struktur lesen
72: kreis_cx=xmldoc.childNodes.item(0).childNodes.item(1).getAttribute("mittelpunkt_x");
73: kreis_cy=xmldoc.childNodes.item(0).childNodes.item(1).getAttribute("mittelpunkt_y");
74: kreis_r=xmldoc.childNodes.item(0).childNodes.item(1).getAttribute("radius");
75: kreis_fill=xmldoc.childNodes.item(0).childNodes.item(1).getAttribute("farbe");
76:
77: // Kreis im SVG-Dokument erzeugen
78: neuer_knoten=context.createElementNS(svgns,"circle");
79: neuer_knoten.setAttribute("cx",kreis_cx);
80: neuer_knoten.setAttribute("cy",kreis_cy);
81: neuer_knoten.setAttribute("r",kreis_r);
82: neuer_knoten.setAttribute("fill",kreis_fill);
83: svgroot.appendChild(neuer_knoten);
84:
85: // Rechteck-Informationen aus XML-Struktur lesen
86: rechteck_x=xmldoc.childNodes.item(0).childNodes.item(3).getAttribute("oben_links_x");
87: rechteck_y=xmldoc.childNodes.item(0).childNodes.item(3).getAttribute("oben_links_y");
88: rechteck_width=xmldoc.childNodes.item(0).childNodes.item(3).getAttribute("breite");
89: rechteck_height=xmldoc.childNodes.item(0).childNodes.item(3).getAttribute("hoehe");
90: rechteck_fill=xmldoc.childNodes.item(0).childNodes.item(3).getAttribute("farbe");
91:
92: // Rechteck im SVG-Dokument erzeugen
93: neuer_knoten=context.createElementNS(svgns,"rect");
94: neuer_knoten.setAttribute("x",rechteck_x);
95: neuer_knoten.setAttribute("y",rechteck_y);
96: neuer_knoten.setAttribute("width",rechteck_width);
97: neuer_knoten.setAttribute("height",rechteck_height);
98: neuer_knoten.setAttribute("fill",rechteck_fill);
99: svgroot.appendChild(neuer_knoten);
100:
101: // Infotext aus XML-Struktur lesen und im SVG-Dokument anzeigen
102: infotext=xmldoc.childNodes.item(0).childNodes.item(5).firstChild.nodeValue;
103: svgdoc.getElementById("info").firstChild.nodeValue=infotext;
104:
105: // generierter SVG-Code fuer Kreis und Rechteck mit printNode() ausgeben
106: if(window.printNode)
107: {
108: kreis_svg=printNode(svgdoc.getElementsByTagName("circle").item(0));
109: rechteck_svg=printNode(svgdoc.getElementsByTagName("rect").item(0));
110: alert("Ausgabe der generierten Objekte mit printNode()\n\nKreis: "+kreis_svg+"\nRechteck: "+rechteck_svg);
111: }
112: }
113: }
114:
115: ]]>
116: </script>
117: </defs>
118:
119: <text x="30" y="30" style="fill: #000; font-size: 24px">XML-Inhalte mittels ASV-Funktion parseXML() in SVG einbinden</text>
120:
121: <!-- Funktionsaufruf von LadeXML() -->
122: <a xlink:href="" cursor="pointer" onclick="return false"><text x="30" y="80" style="fill: #00C" onclick="LadeXML(evt)" onmouseover="TextHover(evt,'#F00','underline')" onmouseout="TextHover(evt,'#00C','none')">XML-Daten laden und darstellen</text></a>
123:
124: <line x1="30" y1="300" x2="730" y2="300" style="stroke: #CCC; stroke-width: 1px"/>
125:
126: <text id="info" x="30" y="330" style="fill: #000; font-size: 14px"> </text>
127:
128: <a xlink:href="http://www.et.fh-merseburg.de/person/meinike/"><text x="550" y="350" onmouseover="TextHover(evt,'#F00','underline')" onmouseout="TextHover(evt,'#000','none')">© by Dr. Thomas Meinike 2002</text></a>
129:
130: <text id="version" x="30" y="350">SVGViewerVersion: </text>
131:
132:
133: </svg>
[zum Anfang]