使用xmlstarlet的XPath查询

马里乌斯(MariuszJędrzejewski)

我有与此类似的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”结构中选择一些值:

  • 头/副
  • 注册/编号
  • 寄存器/值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

我得到:

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调用它可能会更容易。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章