Hi Matthias,
The problem here is you are saving the /contents/ out via the
PageDocument.Page type, rather than the PageDocument itself.
In 1.0.3 you can get round this two ways: either by calling save on the
document, or pass in XmlOptions.setSaveOuter().
An example never hurt (and I need the practice!). Try this:
import java.io.File;
import java.io.StringWriter;
import org.apache.xmlbeans.XmlOptions;
import com.foo.*;
public class Test {
public static void main(String args[]){
PageDocument page = null;
StringWriter out = new StringWriter();
try{
// Input your example doc:
page = PageDocument.Factory.parse(new File("doc.xml"));
// Change something (add another container):
ContainerType container2 = page.getPage().addNewContainer();
container2.set(page.getPage().getContainerArray(0));
// Output
XmlOptions xmlOptions = new XmlOptions();
xmlOptions.setSavePrettyPrint();
out.append("Oops:\n");
page.getPage().save(out, xmlOptions);
out.append("\n\nFixed:\n");
page.getPage().save(out, xmlOptions);
out.append("\n\nFixedAgain:\n");
page.save(out, xmlOptions);
} catch (Exception e){
e.printStackTrace();
return;
}
System.out.println(out.toString());
}
}
Check out the javadoc for XmlObject where all is explained!
http://xmlbeans.apache.org/docs/1.0.4/reference/index.html
Hmm, seems 1.0.4's out and I didn't notice.
All the best,
Dave.
Matthias Wessendorf wrote:
>Hi,
>
>I am using XmlBeans for reading content of xml files. That works fine and all
>works like I expected.
>
>But when I try to write modified content to the specific xml file, something
>goes wrong. I guess I am missing
>something.
>
>here are some steps of my process:
>
>I have schema and I generate java files.
>I have content inside a xml file (depends on that schema)
>
>Reading with "Factory.parse(xmlfile)" is not a problem (if I DON'T change that
>stuff)
>
>here is my small schema:
>--------------------------------------------------------
><?xml version="1.0"?>
><xs:schema
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://foo.com"
> xmlns:pb="http://foo.com"
> elementFormDefault="qualified">
>
><xs:element name="page">
> <xs:complexType>
> <xs:sequence>
> <xs:element name="modification" type="xs:dateTime"/>
> <xs:element name="type" type="xs:string"/>
> <xs:element name="header" type="xs:string" />
> <xs:element name="container" type="pb:containerType"
> maxOccurs="unbounded"/>
> </xs:sequence>
> <xs:attribute use="required" name="id" type="xs:string" />
> </xs:complexType>
></xs:element>
>
>
><xs:complexType name="containerType">
> <xs:sequence>
> <xs:element name="modification" type="xs:dateTime"/>
> <xs:element name="type" type="xs:string"/>
> <xs:element name="contentblock" type="pb:contentBlockType"
> maxOccurs="unbounded"/>
> <xs:element name="container" type="pb:containerType"
> maxOccurs="unbounded"/>
> </xs:sequence>
><xs:attribute use="required" name="id" type="xs:string" />
></xs:complexType>
>
><xs:complexType name="contentBlockType">
> <xs:sequence>
> <xs:element name="modification" type="xs:dateTime"/>
> <xs:element name="text" type="xs:string"/>
> <xs:element name="type" type="xs:string"/>
> <xs:element name="headline" type="xs:string" minOccurs="0" maxOccurs="1" />
> </xs:sequence>
> <xs:attribute use="required" name="id" type="xs:string" />
></xs:complexType>
></xs:schema>
>--------------------------------------------------------
>
>and here is a very small XML file (based upon schema):
>--------------------------------------------------------
><?xml version="1.0" encoding="utf-8"?>
><page xmlns="http://FOO.com" id="content1">
> <type>press</type>
> <header>HEADER</header>
> <modification>2005-04-27T09:30:10</modification>
> <container id="container1">
> <type>textcontainer</type>
> <modification>2005-04-19T09:30:10</modification>
> <contentblock id="contentblock1">
> <type>textcontent</type>
> <text>fooooooo bar BAR FOO</text>
> <modification>2005-05-30T09:30:10</modification>
> </contentblock>
> </container>
></page
>
>--------------------------------------------------------
>
>
>No I modify the stuff and after that I do:
>
>XmlOptions xmlOptions = new XmlOptions();
> xmlOptions.setSavePrettyPrint();
> page.save(xmlFile, xmlOptions);
>
>
>When I now read a second time my xml (the modified stuff) I got this message:
>org.apache.xmlbeans.XmlException: C:\content1.xml:0: error: The document is
>not a [EMAIL PROTECTED]://foo.com: multiple document elements
>
>I guess this is because of my (re-written) xml file has no root element <page>
>
>my content1.xml looks now like:
>
><?xml version="1.0" encoding="UTF-8"?>
><xml-fragment id="content1">
> <foo:type xmlns:foo="http://foo.com">press</foo:type>
> <foo:header xmlns:foo="http://foo.com">hallo1</foo:header>
> <foo:modification
> xmlns:foo="http://foo.com">2005-06-08T16:57:23.672+02:00</foo:modification>
> <foo:container id="container1" xmlns:foo="http://foo.com">
> <foo:type>textcontainer</foo:type>
> <foo:modification>2005-04-19T09:30:10</foo:modification>
> <foo:contentblock id="contentblock1">
> <foo:type>textcontent</foo:type>
> <foo:text>hallo3</foo:text>
> <foo:modification>2005-06-08T16:57:23.672+02:00</foo:modification>
> <foo:headline>hallo2</foo:headline>
> </foo:contentblock>
> </foo:container>
></xml-fragment>
>
>
>What am I doing wrong on using XmlBeans to *change* XML files?
>
>Thanks for any advice.
>
>-Matthias
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: [EMAIL PROTECTED]
>For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]