# Wie kann ich ein XSD-Schema in einer JSP-Seite verwenden?



## ebruss17 (6. Feb 2015)

Hallo Leute,

ich habe eine XML-Spalte in einer datenbank abgespeichert und habe dafür eine XML-Schema definiert. Nun möchte ich diese auf einer JSP-Seite ausgeben. Wie kann ich das denn der JSP-Seite bekanntmachen? Gibt es da bestimmte Schlüsselwörter? Ich bin ziemlich neu in JSP. Nochmals vielen Dank....


----------



## michaels (7. Feb 2015)

Willst du das Schema ausgeben oder den Inhalt der Spalte (also das XML)?
Das Schema ist doch nur ein (oder mehrere) XSD Files. Also einfach zum Download anbieten!?
Das XML würde man doch nicht so ausgeben!? Normalerweise würde man mit dem Schema die Java-Klassen erzeugen und den XML-Inhalt ordentlich aus der Website anzeigen?
Vielleicht solltest du etwas präzisieren, was du eigentlich machen möchtest ;-)


----------



## ebruss17 (7. Feb 2015)

also ich habe in der XML-Spalte XML-Sachen hinterlegt sieht so aus:


```
<system xmlns:xi="http://www.w3.org/2001/XInclude" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		xsi:noNamespaceSchemaLocation="SystemConfiguration.xsd" 
		xsi:schemaLocation="http://www.w3.org/XML/1998/namespace ../xinclude/xml.xsd [url=http://www.w3.org/2001/XInclude]XInclude[/url] 		../xinclude/xinclude.xsd ">
<components>
	<component>
		<name>FileNet</name>
		<version>5.2.1.0</version>
		<buildNumber>dap521.000.024</buildNumber>
	</component>
	<component>
		<name>CSS</name>
		<version>IQQD0055E The search server is stopped. It must be started for the tool to run.</version>
	</component>
	<component>
		<name>CSS</name>
		<version>2.1.0.0-1.1-4147.</version>
		<fixpack>FP5</fixpack>
	</component>
	<component>
		<name>TDS</name>
		<version>6.3.1.0</version>
	</component>
	<component>
		<name>ICN</name>
		<version>2.0.2</version>
	</component>
	<component>
		<name>CMIS</name>
		<version>IBM Content Management Interoperability Services for FileNet Content Manager (IBM CMIS) Version 2.0.2.3</version>
	</component>
	<component>
		<name>DB2</name>
		<version>DB2 v10.1.0.2</version>
	</component>
	<component>
		<name>WAS</name>
		<version>8.5.5.1</version>
	</component>
</components>
</system>
```

sooo dafür habe ich auch ein XSD-Schema definiert, das "SystemConfiguration.xsd" heißt:


```
<?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="system">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element minOccurs="0" ref="config"/>
        <xsd:element ref="components"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="config">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" ref="parameter"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="components">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element maxOccurs="unbounded" ref="component"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="component">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="name"/>
        <xsd:element ref="version"/>
        <xsd:element minOccurs="0" ref="fixpack"/>
		<xsd:element minOccurs="0" ref="buildNumber"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="parameter">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="name"/>
        <xsd:element ref="version"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  <xsd:element name="name" type="xsd:string"/>
  <xsd:element name="version" type="xsd:string"/>
  <xsd:element name="fixpack" type="xsd:string"/>
  <xsd:element name="buildNumber" type="xsd:string"/>
</xsd:schema>
```

Ich möchte jetzt den Inhalt der XML-Spalte mit ihrer Struktur auf der JSP-Seite anzeigen lassen. Kann ich den xsd-File in den JSP-File einbinden? Oder wie macht man das genau? Stimmt eigentlich der header, so wie ich es habe? Ich wäre für jede Hilfe sehr dankbar ...


----------



## ebruss17 (9. Feb 2015)

also Stand jetzt sollen die XML-Sachen, die in der Spalte "Configuration" hinterlegt sind, als eine HTML-Tabelle ausgegeben werden! Ich habe jetzt mal versucht, das innerhalb der JSP-Seite folgendermaßen zu lösen:


```
<table border="1">
                <%

                    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
                    Document doc = null;
                    doc = docBuilder.parse(resultSet.getString("Configuration"));
                    doc.getDocumentElement().normalize();

                    Node node = doc.getDocumentElement();

                    Node componentsNode = null;

                    for (int i = 0; i < node.getChildNodes().getLength(); i++) {
                        if (node.getChildNodes().item(i).getNodeName().equalsIgnoreCase("components")) {
                            componentsNode = node.getChildNodes().item(i);
                        }
                    }

                    for (int i = 0; i < componentsNode.getChildNodes().getLength(); i++) {
                        Node childNode = componentsNode.getChildNodes().item(i);
                        if (childNode.getNodeName().equalsIgnoreCase("component")) {


                %>
                <tr>
                    <%  if (childNode.hasChildNodes()) {
                            for (int k = 0; k < childNode.getChildNodes().getLength(); k++) {
                                Node cchildNode = componentsNode.getChildNodes().item(k);
                    %>
                    <td><%cchildNode.getNodeName();%></td>
                    <%
                        }

                    %>
                </tr>
                <%   }}
                    }

                %>
            </table>
```

Wenn ich das jedoch ausführe, bekomme ich den folgenden Error: "Error 500: com.ibm.db2.jcc.am.SqlException: [jcc][10150][10300][4.14.113] Invalid parameter: Unknown column name MGMT.System.Configuration. ERRORCODE=-4460, SQLSTATE=null "

Kann mir jemand bitte behilflich sein? Sitze schon den ganzen Tag an diesem Problem ;/


----------



## michaels (9. Feb 2015)

Hallo,
ich vermute mal der Fehler passiert in der Zeile
doc = docBuilder.parse(resultSet.getString("Configuration"));
Die Spalte scheint es im ResultSet/Datenbank nicht zu geben.
Ich würde dir empfehlen, den Code mal etwas zu verschlanken.
Baue eine Methode, die nur den XML-Schnipsel aus der Datenbank holt. Das Ergebnis kannst du dir dann mal ausgeben lassen und dann damit weiterarbeiten. Im Moment versuchst du alles in einem Rutsch...das macht den Code nicht gerade übersichtlich und, wie jetzt, im Fehlerfall bzw wenn man es mal nachvollziehen möchte, schwierig.


----------



## ebruss17 (9. Feb 2015)

ich habe das Ganze jetzt mal so umgesetzt:


```
<table border="1">
                <%

        while (resultSet.next()){
                    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();

                    Document doc = docBuilder.parse(resultSet.getSQLXML("Configuration").getBinaryStream());
                    doc.getDocumentElement().normalize();

                    Node node = doc.getDocumentElement();

                    Node componentsNode = null;


                    for (int i = 0; i < node.getChildNodes().getLength(); i++) {
                        if (node.getChildNodes().item(i).getNodeName().equalsIgnoreCase("components")) {
                            componentsNode = node.getChildNodes().item(i);
                        }
                    }

                    for (int i = 0; i < componentsNode.getChildNodes().getLength(); i++) {
                        Node childNode = componentsNode.getChildNodes().item(i);
                        if (childNode.getNodeName().equalsIgnoreCase("component")) {


                %>
                <tr>
                    <%  if (childNode.hasChildNodes()) {
                            for (int k = 0; k < childNode.getChildNodes().getLength(); k++) {
                                Node cchildNode = componentsNode.getChildNodes().item(k);
                    %>
                    <td><%=cchildNode.getTextContent()%></td>
                    <%

}
                    %>
                </tr>
                <%   }}}
                    }

                %>
            </table>
```

Aber es werden nicht alle Werte ausgegeben und die Werte befinden sich an der falschen Stelle!

die richtige Ausgabe, aber es sollte noch eine Spalte "Fixpack" geben nach der Spalte "Version":



Meine und die falsche Ausgabe sieht folgendermaßen aus:



Wo kann der Fehler im Code denn liegen??


----------



## ebruss17 (9. Feb 2015)

Kann denn niemand behilflich sein? Ist wirklich sehr dringend! Bin bis jetzt noch zu keinem Ergebnis gekommen...


----------



## Harry Kane (10. Feb 2015)

Auf den ersten und zweiten Blick sieht es so aus, als sollte die von dir gepostete XML Datei mit dem von dir geposteten Code das von dir erwartete Ergebnis liefern. Ich persönlich finde allerdings dieses plain JSP grauenhaft zu lesen. Vielleicht habe ich deshalb einen Fehler übersehen.
Aber ehrlich gesagt, bezweifle ich, daß du das gepostete XML aus der Datenbank holst. Das von dir gepostete XML Fragment dürfte gar nicht wohlgeformt sein, weil der Wert des Attributes xsi:schemaLocation spitze Klammern und Anführungszeichen enthält, die escapt werden müssen.
Lass dir mal vor der Tabelle den Inhalt des XML in der html Seite ausgeben.


----------

