我有一个示例xml文件,如下所示。
我已经阅读并关注了有关xmlstarlet的其他问题以及从包含命名空间的xml文件中进行选择,但只是无法查看我的语法错误。
我希望以下内容有效: xmlstarlet.exe sel -N xmlns =“http://www.xyz.xx.xxx”-t -v“// xmlns:TReport / TModule / TItemGroup / Name”test-xml.xml
任何指示赞赏......
测试xml.xml:
<?xml version="1.0" encoding="UTF-8"?>
<TReport xmlns="http://www.xyz.xx.xxx">
<ProgVersion>1245219</ProgVersion>
<BuildVersion>131923972</BuildVersion>
<Completed>1</Completed>
<TModule>
<Capabilities>16519</Capabilities>
<Name>Computer Overview</Name>
<TypeID>5080</TypeID>
<HelpID>5080</HelpID>
<TItemGroup>
<Name>ID</Name>
<IconID>5656</IconID>
<HelpID>0</HelpID>
<TItem>
<Name>Host Name</Name>
<IconID>5080</IconID>
<TypeID>0</TypeID>
<DataValue>test2</DataValue>
<HelpID>0</HelpID>
</TItem>
<TItem>
<Name>Workgroup</Name>
<IconID>5656</IconID>
<TypeID>0</TypeID>
<DataValue>WORKGROUP</DataValue>
<HelpID>0</HelpID>
</TItem>
</TItemGroup>
</TModule>
</TReport>
答案 0 :(得分:0)
xmlstarlet处理的XPath表达式中没有默认命名空间,所以你必须为你提到的每个元素重复你的命名空间前缀:
$ xmlstarlet sel -N xmlns="http://www.xyz.xx.xxx" -t -v "//xmlns:TReport/xmlns:TModule/xmlns:TItemGroup/xmlns:Name" /tmp/test.xml
(我使用的是Unix语法,但我相信你会理解它在Windows中的外观。)
通过上述内容,我得到ID
作为输出。
我还建议不要使用xmlns
作为前缀。它有效,但看起来很有趣。