# xml und xsl parsen mit xerces



## xerces (10. Mai 2006)

Hallo,

ich möchte xml und xsl mit xerces parsen. Wo kann ich diese Bibliothek runterladen und kann mir jemand an einem Bsp zeigen wie man das macht?

Danke


----------



## byte (10. Mai 2006)

Xerces gibts hier: http://xerces.apache.org/xerces2-j/

Beispiele zum Parsen solltest Du dort auch finden. Wenns Dir zu kompliziert ist, dann verwende einfach JDOM.

Wegen der XSL: Ich nehme mal nicht an, dass Du das Stylesheet als XML-Datei parsen willst, sondern damit eine Transformation machen willst. Dazu brauchste dann noch nen XLS Prozessor, wie z.B. den hier: http://xalan.apache.org/

Der kann aber afaik noch kein XSLT 2.0. Dafür kannste Saxon verwenden: http://www.saxonica.com/


----------



## xerces (10. Mai 2006)

Hallo, ich habe 
xerces-2_8_0 runtergeladen.

Die .jar Datein die in dem Ordner waren:

resolver.jar
xercesImpl.jar
xercesSamples.jar
xml-apis.jar


Ich habe mir das so vorgestellt:
Aus xml und xsl kommt html raus. Und dieses Xerces wandelt das um.
Mein Problem ist -> ich habe von Java fast keine Ahnung, ich habe das so angefangen:


```
public class Main
{
	public static void main(String[] arg)
	{
		String xml = "<root>"+
				"<satz/>"+
			 "</root>";
	   String xsl = "<xsl:template match="/">"+
					 "<head></head><body>"+
					 "<xsl:apply-imports/>"+
					 "</body>"+
					 "</xsl:template>"+
					 
					 "<xsl:template match="satz">"+
					 "Das ist ein Test" +
					 "</xsl:template>";
	}
}
```

Könnte jemand bitte meine Main Klasse richtig in Java schreiben, damit am Ende das funktioniert und ich "Das ist ein Test" erhalte?
Danke


----------



## byte (10. Mai 2006)

Nein! Wenn Du von XML über XSL zu HTML transformieren willst, brauchst Du einen (XSL) Prozessor (so heisst das). Also z.b. Xalan oder Saxon.

Also z.b. Saxon und JDOM runterladen und dann folgendermaßen per Java transformieren:


```
public void transform(String xml, String xsl, String out) {
		try {
			SAXBuilder builder = new SAXBuilder();
			Document doc = builder.build(new File(xml));
			DocumentWrapper docw = new DocumentWrapper(doc, xml, new Configuration());
			System.setProperty("javax.xml.transform.TransformerFactory",
			                   "net.sf.saxon.TransformerFactoryImpl");
			TransformerFactory tfactory = TransformerFactory.newInstance();
			Templates templates = tfactory.newTemplates(new StreamSource(xsl));
			Transformer transformer = templates.newTransformer();
			File output = new File(out);
			transformer.transform(docw, new StreamResult(output));
			
		} catch(JDOMException e1) {
			e1.printStackTrace();
		} catch(IOException e2) {
			e2.printStackTrace();
		} catch(TransformerConfigurationException e3) {
			e3.printStackTrace();
		} catch(TransformerException e4) {
			e4.printStackTrace();
		}
	}
```

Die Parameter (xml, xsl, out) sind jeweils die Pfade zu den Dateien (out ist das Ergebnis, also in Deinem Fall die HTML Datei).


----------



## xerces (10. Mai 2006)

Hallo,

ich "muss" das über xersec realisieren.

Ich habe folgendes geschrieben :



```
import java.io.File;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class Main
{
	public static void main(String[] args) throws TransformerFactoryConfigurationError, TransformerException
	{
		Transformer t = TransformerFactory.newInstance().newTransformer();
		
		File f1 = new File("C:\\xmlParser\\text.xml");
		File f2 = new File("C:\\xmlParser\\out.html");
		StreamSource xmlSource = new StreamSource( f1 );
		StreamResult outputTarget = new StreamResult( f2 );
		t.setOutputProperty(OutputKeys.METHOD,"html");
		t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,"no");
		t.setOutputProperty(OutputKeys.STANDALONE,"yes");
		t.transform(xmlSource, outputTarget);
	}
}
```


Funktioniert noch nicht ganz.  Anstatt html in out.html zu schreiben, schreibt er den Inhalt der text.xml Datei rein.
Man hat mir gesagt, dass es über xersec geht und gehen muss.

Was ist an dem Code falsch?

Danke im Voraus


----------



## Guest (10. Mai 2006)

Meine XSL und XML Dateien:


```
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <html><head></head><body>
  <xsl:apply-templates />
 </body></html>
</xsl:template>

<xsl:template match="satz">
 <html><head></head><body>
  <xsl:apply-templates />
 </body></html>
</xsl:template>

</xsl:stylesheet>
```




```
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="text.xsl" ?>
<root>
    <satz/>
</root>
```


----------



## xerces (10. Mai 2006)

> <?xml version="1.0" encoding="iso-8859-1"?>
> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> 
> <xsl:template match="/">
> ...



Ich meinte so:

<?xml version="1.0" encoding="iso-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
<html><head></head><body> 
  <xsl:apply-templates /> 
</body></html> 
</xsl:template> 

<xsl:template match="satz"> 
Das ist ein Test
</xsl:template> 

</xsl:stylesheet>


----------



## byte (10. Mai 2006)

xerces hat gesagt.:
			
		

> Man hat mir gesagt, dass es über xersec geht und gehen muss.



Die Diskussion ist etwas müßig, wenn Du all das was ich schreibe ignorierst. Lies Dich am besten erstmal in die Thematik ein. Du könntest damit anfangen nachzulesen, was ein Parser ist und was Xerces im speziellen kann und was nicht.


----------



## xerces (12. Mai 2006)

Hab schon selber meinen Parser geschrieben mit xerces....
Tolles Forum  :bloed:


----------

