Hi David,
I've solved this problem with creation of a separate node. You can find
an example here:
https://bitbucket.org/fakturamadev/fakturama-2/src/0b8ffae87c445ddd7e0618ecf643591ee933ba15/Fakturama-Parent/org.fakturama.print.openoffice/src/main/java/org/odftoolkit/simple/common/navigation/PlaceholderNode.java?at=develop&fileviewer=file-view-default


Look at the "replaceWith(...)"-methods. This is a class from my own
OpenSource project, extending the ODFToolkit with a placeholder
replacement functionality. In short, it replaces a placeholder with the
according String. Unfortunately, I didn't have the time to build a
sample project and contribute it to this project (sorry, Svante ;-) ).
But it's a point at my agenda...

Regards,
Ralf.


Am 10.05.2018 um 22:34 schrieb Svante Schubert:
> Hello David,
>
> to reproduce your problem, I have added a test case in one of the existing
> tests of the Simple API.
>
> @Test
> public void testXMLasString() {
> try {
>             TextDocument resDoc = (TextDocument)
> TextDocument.loadDocument(ResourceUtilities.getTestResourceAsStream("section.odt"));
>             Section section = resDoc.getSectionByName( "Section1" );  //
> this section does exist in the document
>
>             // create new node form String
>             String fragment = "<text:p text:style-name=\"P13\"><text:span
> text:style-name=\"T1\">Test</text:span></text:p>";
>             Node node =
> DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new
> InputSource(new StringReader(fragment ))).getDocumentElement();
>             node = section.getOdfElement().getOwnerDocument().importNode(
> node, true );
>             // append new node into section
>             section.getOdfElement().appendChild( node );
>
> resDoc.save(ResourceUtilities.newTestOutputFile("sectionWithText.odt"));
> } catch (Exception e) {
> Logger.getLogger(ListItemTest.class.getName()).log(Level.SEVERE, null, e);
> Assert.fail(e.getMessage());
> }
> }
>
> It is not REALLY a test as it always succeeds, but by this, I am able to
> debug in the IDE and first of all get a document from your procedure.
> You might want to do the same.
>
> An OpenDocument File is a ZIP with XML files within. You can unzip it and
> take a look into the content.xml
> I usually use the JEdit editor with the "archive" and "XML" plugin to open
> the content.xml file without unpacking and make an indent for the XML.
>
> If you do so it reveals the following:
> <text:section text:name="Section1" text:style-name="Sect1">
> <text:p text:style-name="Standard"/>
> <p style-name="P13"><span style-name="T1">Test</span></p></text:section>
>
> The string is inserted, but the prefix, the namespace was not found. You
> might get the DOM element and insert the elements one by one with DOM
> functions or search for a solution.
> Uncertain how it works by String insertion. If you find a way, please come
> back and tell :)
>
> Good luck!
> Svante
>
> 2018-05-10 12:08 GMT+02:00 David Michal <[email protected]>:
>
>> Hi,
>>
>> I have a code:
>>
>> // -----------------------------------------------------------------
>>
>> TextDocument resDoc = TextDocument.loadDocument( someInputStream );
>>
>> Section section = resDoc.getSectionByName( "Section1" );  // this section
>> does exist in the document
>>
>> // create new node form String
>>
>> String fragment = "<text:p text:style-name=\"P13\"><text:span
>> text:style-name=\"T1\">Test</text:span></text:p>";
>>
>> Node node = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(
>> new InputSource( new StringReader( fragment ) ) ).getDocumentElement();
>> node = section.getOdfElement().getOwnerDocument().importNode( node, true
>> );
>>
>> // append new node into section
>>
>> section.getOdfElement().appendChild( node );
>>
>> // -----------------------------------------------------------------
>>
>> The code runs without a problem. But nothing does appear in the section in
>> the result document. Please any idea how can I add new nodes created from
>> string into the odf document?
>>
>> Thanks,
>>
>> David
>>
>>
> ᐧ
>

Reply via email to