2014-03-04 31 views
0

我有一個示例xml文件,如下所示。xmlstarlet.exe不匹配XPaths(具有命名空間的文件)

我已閱讀並遵循有關xmlstarlet和從包含名稱空間的xml文件中選擇的其他問題,但只是未能看到我的語法錯在哪裏。

我期望以下工作: xmlstarlet.exe sel -N xmlns =「http://www.xyz.xx.xxx」-t -v「// xmlns:TReport/TModule/TItemGroup/Name」測試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

有作爲XPath表達式默認命名空間xmlstarlet過程,所以你沒有這樣的事必須重複您提到的每個元素的名稱空間前綴:

$ 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作爲您的前綴。它有效,但看起來很有趣。

相關問題