I want to write a script to iterate over each element “NewTempP” with attributes and child element and copy the structure to element “fig” as child element. “NewTempP” and “fig” are siblings.
Xml file:
<sec>
<NewTempP mimetype="image" mime-subtype="jpeg" xlink:href="image1.jpeg">
<alt-text>Describes a picture</alt-text>
</NewTempP >
<p>test</fig>
<fig> </fig>
<NewTempP mimetype="image" mime-subtype="jpeg" xlink:href="image1.jpeg">
<alt-text>Describes a picture</alt-text>
</NewTempP >
<p>test</fig>
<fig> </fig>
……..
<sec>
What I did:
xmlstarlet ed -L -P -u "//fig[preceding-sibling::*[1][self:: NewTempP/@*]]/inline-graphic" -x "string(../preceding-sibling::NewTempP [1]/@*)" test.xml
It does not work.
The result supposed to look like this:
<sec>
<NewTempP mimetype="image" mime-subtype="jpeg" xlink:href="image1.jpeg">
<alt-text>Describes a picture</alt-text>
</NewTempP >
<p>test</fig>
<fig>
<NewTempP mimetype="image" mime-subtype="jpeg" xlink:href="image1.jpeg">
<alt-text>Describes a picture</alt-text>
</NewTempP >
</fig>
<NewTempP mimetype="image" mime-subtype="jpeg" xlink:href="image1.jpeg">
<alt-text>Describes a picture</alt-text>
</NewTempP >
<p>test</fig>
<fig>
<NewTempP mimetype="image" mime-subtype="jpeg" xlink:href="image1.jpeg">
<alt-text>Describes a picture</alt-text>
</NewTempP >
</fig>
……..
<sec>