サンプルXMLは次のとおりです。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<level01>
<field01>AAAAAAAAAAAAAAAAAAAA</field01>
<field02>BBBBBBBB</field02>
<field03>CCCCCCCCCCCCCCCCCCCC</field03>
<field04>DDDDDDDDDDDDDDDDDDDD</field04>
<field05>DDD</field05>
<level02>
<field01>EEEEEEEEE</field01>
<field02>FFF</field02>
<field04>GGGGGGGGGGs</field04>
<field05>HHH</field05>
<level03>
<field01>IIIIIIIII</field01>
<field02>JJJ</field02>
<field04>KKKKKKKKK</field04>
<field05>L</field05>
</level03>
</level02>
</level01>
</root>
希望の出力は次のとおりです。
AAAAAA,BBBBB, CCCCCCCCCCCCC ,DDDDDDDDDD ,DDD,EEE,FFF,GGGG,HHH,III,JJJ,KKK,L
ベストアンサー1
xmlstartlet主張が少しトリッキーですね。 xsl方式では、テンプレート(-t)として扱う必要があります。
xmlstarlet sel -B -t -m '//text()' -c 'concat(.,",")' x1.xml
どこ:
- -B: 通常、スペースを削除します。
- -t: xsl 意味のテンプレート
- -m:xpath expと一致
- -c:xpath expのコピー
この式は追加の「,」を生成します。もちろん、一般的なUnixツールを使用して次のことを行うことができます。
xmlstarlet sel -B -t -v '//text()' x1.xml |
sed -z 's/\n/, /g; s/$/\n/'
- -t : テンプレート(xsl 意味)
- -v:値(xpath式)
- sed... トリム,