使用 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