我有与此类似的 XML:
<orders>
<orderCompleteRequestType>
<Head>
<Aufnr>11111</Aufnr>
</Head>
<Register>
<Id>180</Id>
<value1>11</value1>
<value2>22</value2>
</Register>
<Register>
<Id>181</Id>
<value1>3</value1>
<value2>43</value2>
</Register>
<Register>
<Id>160</Id>
<value1>5</value1>
<value2>25</value2>
</Register>
</orderCompleteRequestType>
<orderCompleteRequestType>
<Head>
<Aufnr>22222</Aufnr>
</Head>
<Register>
<Id>280</Id>
<value1>1</value1>
<value2>12</value2>
</Register>
<Register>
<Id>160</Id>
<value1>12</value1>
<value2>7</value2>
</Register>
<Register>
<Id>281</Id>
<value1>94</value1>
<value2>22</value2>
</Register>
</orderCompleteRequestType>
</orders>
我想以 CSV 格式从每个“orderCompleteRequestType”结构中选择一些值:
- 头/奥夫恩
- 注册/ID
- 寄存器/值1
- 寄存器/值2
使用以下命令行时:
xmlstarlet sel -T -t -m "/orders/orderCompleteRequestType" -v "Head/Aufnr" -o ";" -v "Register/Id" -o ";" -v "Register/value1" -o ";" -v "Register/value2" -n -n test.xml
I get:
11111;180
181
160;11
3
5;22
43
25
22222;280
160
281;1
12
94;12
7
22
所以,首先是 Register/Id 节点的所有值,接下来是所有 Register/value1,最后是所有 Register/value2,但我期望的是这样的:
11111;180;11;22
11111;181;3;43
11111;160;5;25
22222;280;1;12
22222;160;12;7
22222;281;94;22
谁能帮助我,因为我的大脑拒绝工作......
而不是匹配orderCompleteRequestType
,考虑匹配Register
反而...
xmlstarlet sel -T -t -m "/orders/orderCompleteRequestType/Register" -v "concat(../Head/Aufnr,';',Id,';',value1,';',value2)" -n test.xml
输出...
11111;180;11;22
11111;181;3;43
11111;160;5;25
22222;280;1;12
22222;160;12;7
22222;281;94;22
每个之间没有额外的换行符orderCompleteRequestType
,但也许这没什么大不了的?如果是,那么编写 XSLT 并使用 xmlstarlet 调用它可能会更容易。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)