# XML Element mit ":" im Namen



## outbreaker (10. Jun 2008)

Hallo,

Ich möchte ein Word 2003 Dokument als XML erstellen. Also so das ich das Dokument in Word öffnen kann.
Nun wollte ich mit JDOM das Dokument erstellen brauche aber in den Tag namen z. B. vom Element Doppelpunkte 

So müsste das aussehen:


```
...
Element elementToAdd = new Element("w:wordDocument");
...
```
bekomme aber diesen Fehler:


> Exception in thread "main" org.jdom.IllegalNameException: The name "w:wordDocument" is not legal for JDOM/XML elements: Element names cannot contain colons.
> at org.jdom.Element.setName(Element.java:207)
> at org.jdom.Element.<init>(Element.java:141)
> at org.jdom.Element.<init>(Element.java:153)
> at Example2.main(Example2.java:30)



Geht das irgendwie mit JDOM oder gibt es eine andere Bibliothek um XML Dokumente zu erstellen wo Doppelpunkte gehen?

Danke


----------



## Wildcard (10. Jun 2008)

Es gibt keine : im Namen von XML Elementen. Das ist ein Namespace Präfix.
Bist du dir sicher das du auf diese Art ein Word Doc erstellen willst, das scheint mir recht abenteuerlich, bis hoffnungslos.


----------



## outbreaker (10. Jun 2008)

Wildcard hat gesagt.:
			
		

> ... recht abenteuerlich, bis hoffnungslos.


Wie soll ich das verstehen?

Ich habe mir das XML mal angesehen und ich denke das es nicht das Problem wäre wenn ich das mit den Doppelpunkten hinbekommen würde.

Aber daran scheitert es im Moment.
oder hast du eine andere Idee wie ich an ein Worddokument komme?
Hatte mir POI schonmal angesehen aber ich fand kein funktionierendes Beispiel und ich fand das auch relativ kompliziert. Da fand ich die XML Idee am einfachsten.


----------



## Wildcard (10. Jun 2008)

Das Format ist keine offene Spezifikation, was soll daran einfach sein?
Nimm eine der API's, oder OpenOffice.


----------



## outbreaker (10. Jun 2008)

API's für doc?

naja da liegt aus meiner Sicht das Problem so wirklich gibt es da keine 

POI fand ich nicht so einfach
OpenXML4J ist gerade mal in der Betaphase

Ich weiß das es keine offene Spezi ist aber die Elemente die ich brauche habe ich soweit schon rausgefiltert.

oder fallen dir gute java APIs ein für Word nicht OpenOffice soll MS Word Dokument sein


----------



## Wildcard (10. Jun 2008)

OpenOffice schreibt auf Wunsch auch die hässlichen .docs.


> POI fand ich nicht so einfach


Aber wohl einfacher als es sich selbst zu basteln.


----------



## outbreaker (10. Jun 2008)

Muss auf dem Rechner wo die Anwendung laufen OpenOffice installiert sein?



> Aber wohl einfacher als es sich selbst zu basteln.


kommt ganz darauf an wie komplex das Dokument werden soll  :wink:


----------



## Wildcard (10. Jun 2008)

Installiert nicht unbedingt, OOo gibt's auch Portable.
Wenn du einen Server hast, lässt sich das ganze auch Remote und über Webservices machen.
OOo ist extrem mächtig, aber für ein einfaches Dokument sicherlich übertrieben.


----------



## outbreaker (10. Jun 2008)

Wildcard hat gesagt.:
			
		

> ... aber für ein einfaches Dokument sicherlich übertrieben.


ja das denke ich auch

Na vielleicht muss ich mir doch was eigenes ausdenken wenn es keine XML API gibt um solche Elemente anzulegen


----------



## Wildcard (10. Jun 2008)

Was ist überhaupt dein Zielformat?


> Na vielleicht muss ich mir doch was eigenes ausdenken wenn es keine XML API gibt um solche Elemente anzulegen


Das ist natürlich Unsinn, du verstehst nur den Unterschied zwischen dem Namem und dem qualifizierten Namen nicht.


----------



## outbreaker (10. Jun 2008)

Ich möchte ein Dokument generieren welches der Anwender dann in Word öffnen kann um noch spezielle Sachen anzupassen. 

Der Benutzer kommt eine Maske kann Sachen einstellen, dann wird das Dokument generiert und kann dann in Word nach bearbeitet werden wenn nötig.
Das ist das Ziel. 
Am einfachsten, dachte ich jetzt, ist es das Dokument in dem xml-Format für Word zu erstellen


----------



## Wildcard (10. Jun 2008)

In welchem XML Format? Die Word Formate sind ein ziemliches chaos, da gibt es diverse 'Dialekte'.


----------



## outbreaker (10. Jun 2008)

Wildcard hat gesagt.:
			
		

> Das ist natürlich Unsinn, du verstehst nur den Unterschied zwischen dem Namem und dem qualifizierten Namen nicht.



Das ist möglich  ???:L 

Das Word XML sieht so aus:



> <w:wordDocument w:macrosPresent="no" w:embeddedObjPresent="no" wcxPresent="no" xml:space="preserve">
> <oocumentProperties>
> <o:Author>XYZ</o:Author>
> <o:LastAuthor>XYZ</o:LastAuthor>
> ...



Kann ich sowas mit JDOM erreichen?


----------



## outbreaker (10. Jun 2008)

Wildcard hat gesagt.:
			
		

> In welchem XML Format? Die Word Formate sind ein ziemliches chaos, da gibt es diverse 'Dialekte'.



ja ich meine das Word XML


----------



## Wildcard (10. Jun 2008)

Was soll's denn werden? WordprocessingML 2003?
OfficeOpenXML Prä-ISO OfficeOpenXML Post ISO?

Mit allen drei Formaten wäre ich sehr vorsichtig, da sie eher schlecht als recht funkionieren.
Die hässliche Binärvariante (mit zB POI) ist AFAIK robust*er*.
Und ja, natürlich kann man das mit JDom machen.

EDIT:
oder nimm doch einfach RTF, das ist wesentlich einfacher und genügt für einfache Dokumente vollkommen.


----------



## outbreaker (10. Jun 2008)

An RTF hatte ich auch schon gedacht.
gibt es für RTF eine Java API?

Wir kann ich das mit den Doppelpunkten und JDOM realisieren?


----------



## Wildcard (10. Jun 2008)

Ja, mehrere. iText kann das zB.


> Wir kann ich das mit den Doppelpunkten und JDOM realisieren?


http://www.jdom.org/docs/apidocs/org/jdom/Element.html#Element(java.lang.String,%20java.lang.String,%20java.lang.String)


----------



## outbreaker (10. Jun 2008)

vielleicht stehe ich ja gerade auf dem Schlauch aber das geht nicht:


```
Element root = new Element("w",":","wordDocument");
```



> Exception in thread "main" org.jdom.IllegalNameException: The name ":" is not legal for JDOM/XML Namespace prefixs: Namespace prefixes cannot contain colons.
> at org.jdom.Namespace.getNamespace(Namespace.java:158)
> at org.jdom.Element.<init>(Element.java:184)
> at Example1.main(Example1.java:17)


----------



## Wildcard (10. Jun 2008)

Nein.
w ist ein XML Präfix.
Du gibst den Präfix an ("w") und die URI auf die er sich bezieht.


----------



## Wildcard (10. Jun 2008)

Sofern es sich um Wordprocessing ML 2003 handelt (die Frage ignorierst du ja), rate ich einfach ins Blaue das w der Präfix für

```
http://schemas.microsoft.com/office/word/2003/wordml
```
sein soll. Aus den Informationen die du mir zur Verfügung stellst lässt sich das allerdings nicht herleiten.
Ein XML Auffrischungskurs wäre wohl angebracht bevor du versuchst ein wordML zu basteln.


----------



## outbreaker (10. Jun 2008)

aso

also so

```
Element root = new Element("wordDocument","w","xyz");
```

geht das auch für Attribute?

muss ja sowas hinbekommen


> <w:wordDocument w:macrosPresent="no" w:embeddedObjPresent="no" wcxPresent="no" xml:space="preserve">



habe bei setAttribute nicht diese Möglichkeit gefunden


----------



## outbreaker (10. Jun 2008)

Wildcard hat gesagt.:
			
		

> Sofern es sich um Wordprocessing ML 2003 handelt (die Frage ignorierst du ja), rate ich einfach ins Blaue das w der Präfix für
> 
> ```
> http://schemas.microsoft.com/office/word/2003/wordml
> ...



sorry Frage überlesen  :shock: 

ja es soll WordprocessingML 2003 werden
in XML werde ich mich noch genauer einarbeiten  :### aber auch "learning by doing"  :wink:


----------



## Wildcard (10. Jun 2008)

http://www.jdom.org/docs/apidocs/org/jdom/Element.html#setAttribute(java.lang.String,%20java.lang.String,%20org.jdom.Namespace)


----------



## outbreaker (10. Jun 2008)

alles klar
na ich werde mir das nochmal genauer ansehen
Danke erstmal für die Hilfe :applaus:


----------

