linux - Enclose xml body with header and main tag -


i have xml file structure xmllint:

<entities>     <name>john</name> </entities> <entities>     <name>david</name> </entities> 

now transform file in like:

<?xml version="1.0" encoding="utf-8"?> <data>    <entities>       <name>john</name>    </entities>    <entities>       <name>david</name>    </entities> </data> 

how can sed? tried this

sed -e '1i\<?xml version="1.0" encoding="utf-8"?><data>' test.xml > test1.xml 

but still lack </data>. idea enclose text test.xml header , main tag called <data></data>

sed -e '1i\<?xml version="1.0" encoding="utf-8"?><data>' -e '$a\</data>' test.xml > test1.xml 

the main trick here put $a\</data> behind -e flag of own isn't interpreted more raw text insert before first line.

that give valid xml. precise output in question, use

sed -e '1i\<?xml version="1.0" encoding="utf-8"?>' -e '1i\<data>' -e '$a\</data>' -e 's/^/    /' 

or so. if me, though, i'd use sed make data valid xml , work xml tools there (i.e., use first snippet , pipe through xmllint indentation). handling structured data sed brittle, don't want longer have to.


Comments