[ 
https://issues.apache.org/jira/browse/XMLBEANS-570?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17416088#comment-17416088
 ] 

Christian Baune commented on XMLBEANS-570:
------------------------------------------

The code is very compact and legibility wasn't really a concern I thinkĀ :P
I sorted out my issue by not relying on the copying and using the 
"toPrevSibling".
The trick is to iterate data backward so it appears forward in the document 
flow.
The huge downside being that it doesn't work with sequences unless you slurp 
everything in memory...

Another possible solve is setting bookmark for the last inserted element, but 
that is assuming bookmarks work as intended and it is dangerous.

> Bookmark are not copied when you copy cursors
> ---------------------------------------------
>
>                 Key: XMLBEANS-570
>                 URL: https://issues.apache.org/jira/browse/XMLBEANS-570
>             Project: XMLBeans
>          Issue Type: Bug
>          Components: Cursor, XmlObject
>    Affects Versions: Version 5.0.0
>         Environment: UbuntuLinux, XMLBean 5.0.0
>            Reporter: Christian Baune
>            Priority: Major
>
> Documentation state:
> {quote}The cursors and bookmarks located in the XML that was copied are also 
> copiedĀ to the new location.
> {quote}
> It does not copy the bookmark, but moves it.
> It also move the original cursor.
> When running the code bellow, the expected output is:
> {noformat}
> <a>Test 1</a>
> <a>modified</a>{noformat}
> The current output is:
> {noformat}
> <a>Test 1</a>{noformat}
> Code (Kotlin) to reproduce the issue:
> {code:none}
> data class TestBookmark(val key:String): XmlCursor.XmlBookmark(){
>     override fun getKey():Any{
>         return key
>     }
> }
> fun main(){
>     @Language("XML") val xml="""<r>
>         |<a>Test 1</a>
>         |<a>Test 2</a>
>         |<a>Test 3</a>
>         |<a>Test 4</a>
>         |</r>""".trimMargin()
>     val xmlObj=XmlObject.Factory.parse(xml)
>     val bk=TestBookmark("test")
>     xmlObj.newCursor().use { cur->
>         cur.advanceTo(QName("a"))
>         cur.setBookmark(bk)
>         cur.newCursor().use { here ->
>             // Per doc: The cursors and bookmarks located in the XML that was 
> copied are also copied to the new location.
>             cur.copyXml(here)
>             here.textValue="changed"
>         }
>     }
>     xmlObj.newCursor().use { cur->
>         while (cur.toNextBookmark("test")!=null){
>             // Expect to print <a>Test 1</a> and <a>changed</a>
>             println(cur.xmlText())
>         }
>     }
> }
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org
For additional commands, e-mail: dev-h...@poi.apache.org

Reply via email to