使用 xmllint 合并不同数量的 Xpath 节点
Merging different numbers of Xpath nodes using xmllint
我有一个包含以下数据的文件:
<root>
<x>
<y lang="en">
<z>1</z>
<z>2</z>
<z>3</z>
<z>4</z>
<t>5</t>
</y>
</x>
<x>
<y lang="en">
<z>a</z>
<z>b</z>
<t>c</t>
</y>
</x>
</root>
我想打印如下
1 2 3 4 5
a b c
第一个有 4z 和 1t,第二个有 2z 和 1t。由于 xargs 不是静态的,因此我无法按需要打印它们。我尝试了一个脚本 $f 作为文件:
xmllint --xpath "//root/x/y/z/node() | //root/x/y/t/node()" $f | xargs -n2
我得到的结果是:
1 2
3 4
5个
b c
如果你有任何想法,我会很高兴。
试试这个
xmllint --xpath "//x/y/*/node()" $f | xargs -n2
尝试:
xidel file.xml -e '//x/string-join(./y/*/.," ")'
我用你的 xml 得到的输出:
1 2 3 4 5
a b c
另一种选择是使用 sel
(select) option of xmlstarlet...
xmlstarlet sel -t -m "//y" -v "normalize-space()" -n input.xml
我有一个包含以下数据的文件:
<root>
<x>
<y lang="en">
<z>1</z>
<z>2</z>
<z>3</z>
<z>4</z>
<t>5</t>
</y>
</x>
<x>
<y lang="en">
<z>a</z>
<z>b</z>
<t>c</t>
</y>
</x>
</root>
我想打印如下
1 2 3 4 5
a b c
第一个有 4z 和 1t,第二个有 2z 和 1t。由于 xargs 不是静态的,因此我无法按需要打印它们。我尝试了一个脚本 $f 作为文件:
xmllint --xpath "//root/x/y/z/node() | //root/x/y/t/node()" $f | xargs -n2
我得到的结果是:
1 2
3 4
5个
b c
如果你有任何想法,我会很高兴。
试试这个
xmllint --xpath "//x/y/*/node()" $f | xargs -n2
尝试:
xidel file.xml -e '//x/string-join(./y/*/.," ")'
我用你的 xml 得到的输出:
1 2 3 4 5
a b c
另一种选择是使用 sel
(select) option of xmlstarlet...
xmlstarlet sel -t -m "//y" -v "normalize-space()" -n input.xml