gpt4 book ai didi

xml - 与 xmlstarlet 斗争

转载 作者:数据小太阳 更新时间:2023-10-29 02:57:53 28 4
gpt4 key购买 nike

我有一个非常简单的 XML 文件,需要用 xmlstarlet 解析(我在 Windows 下):

<?xml version="1.0" encoding="utf-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.02" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<pain.001.001.02>
<GrpHdr>
<MsgId>IDENTIFYER</MsgId>
<CreDtTm>2013-01-25T11:15:02</CreDtTm>
<NbOfTxs>6</NbOfTxs>
<CtrlSum>6268.07</CtrlSum>
<Grpg>MIXD</Grpg>
</GrpHdr>
<PmtInf>
</PmtInf>
</pain.001.001.02>
</Document>

假设我想检索 CtrlSum 元素;当我尝试时它失败了

xml sel -t -m "/Document/pain.001.001.02/GrpHdr" -v CtrlSum myfile.xml

但是如果我从文件中删除 xmlns 和 xmlns:xsi 属性,它就可以工作(但在现实生活中我不能那样做)。我知道我必须使用 -N 选项,但我不知道该怎么做。任何帮助都将非常有值(value)。

非常感谢洛朗(或劳伦斯,或拉里 :))

最佳答案

xmlns 属性定义了默认命名空间,您在 XML 文件中看到的每个没有前缀的元素(对于您发布的示例来说恰好是所有这些元素)都使用默认命名空间命名空间。 XPath 不允许使用默认 namespace ,因此您必须为其分配前缀 -N 并在匹配时使用它:

xml sel -N p=urn:iso:std:iso:20022:tech:xsd:pain.001.001.02 -t -v /p:Document/p:pain.001.001.02/p:GrpHdr/p:CtrlSum myfile.xml

关于xml - 与 xmlstarlet 斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14527801/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com