There are a number of flattening questions here, but none deal with this level of complexity.
I have an xml document that looks something like:
<document>
<div class='target-one'>
maybe some text node, maybe not...1
<randomElement>
maybe some text node, maybe not...2
</randomElement>
<div class='target-one'>
<randomElement>
maybe some text node, maybe not...3
</randomElement>
</div>
maybe some text node, maybe not...4
<randomElement>
maybe some text node, maybe not...5
</randomElement>
<div class='target-two'>
maybe some text node, maybe not...6
<randomElement>
maybe some text node, maybe not...7
</randomElement>
</div>
maybe some text node, maybe not...8
<randomElement>
maybe some text node, maybe not...9
</randomElement>
</div>
<div class='target-two'>
maybe some text node, maybe not...10
<randomElement>
maybe some text node, maybe not...11
</randomElement>
<div class='target-one'>
<randomElement>
maybe some text node, maybe not...12
</randomElement>
</div>
maybe some text node, maybe not...13
<randomElement>
maybe some text node, maybe not...14
</randomElement>
<div class='target-two'>
maybe some text node, maybe not...15
<randomElement>
maybe some text node, maybe not...16
</randomElement>
</div>
maybe some text node, maybe not...17
<randomElement>
maybe some text node, maybe not...18
</randomElement>
</div>
</document>
So there is a list of target elements which can be nested in any order. I would like to flatten them whenever they are nested by adding in more of the parent element to wrap the randomElement and nodes separately, while making the target children into target siblings. What I mean is that the output should look like:
<document>
<div class='target-one'>
maybe some text node, maybe not...1
<randomElement>
maybe some text node, maybe not...2
</randomElement>
</div>
<div class='target-one'>
<randomElement>
maybe some text node, maybe not...3
</randomElement>
</div>
<div class='target-one'>
maybe some text node, maybe not...4
<randomElement>
maybe some text node, maybe not...5
</randomElement>
</div>
<div class='target-two'>
maybe some text node, maybe not...6
<randomElement>
maybe some text node, maybe not...7
</randomElement>
</div>
<div class='target-one'>
maybe some text node, maybe not...8
<randomElement>
maybe some text node, maybe not...9
</randomElement>
</div>
<div class='target-two'>
maybe some text node, maybe not...10
<randomElement>
maybe some text node, maybe not...11
</randomElement>
</div>
<div class='target-one'>
<randomElement>
maybe some text node, maybe not...12
</randomElement>
</div>
<div class='target-two'>
maybe some text node, maybe not...13
<randomElement>
maybe some text node, maybe not...14
</randomElement>
</div>
<div class='target-two'>
maybe some text node, maybe not...15
<randomElement>
maybe some text node, maybe not...16
</randomElement>
</div>
<div class='target-two'>
maybe some text node, maybe not...17
<randomElement>
maybe some text node, maybe not...18
</randomElement>
</div>
</document>
So I wind up with many more of the parent divs, but all the text and the other nodes are in the right place. Please note that randomElement might be a div that is not a target class... This is my first question on StackOverflow because I just don't get the recursion that would be necessary for this.
Thanks!
No comments:
Post a Comment