2012-11-06 48 views
1

爲什麼我沒有使用下面的XML和XPath代碼得到任何結果?XPath查詢不會輸出任何結果

這實際上是PowerShell,但我也嘗試過this online tool,但它又一次:它什麼都沒輸出!

我想我完全忽略了一些東西!

[xml] $xml = @" 
<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup Label="ProjectConfigurations"> 
    <ProjectConfiguration Include="Debug|AnyCPU"> 
     <Configuration>Debug</Configuration> 
     <Platform>AnyCPU</Platform> 
    </ProjectConfiguration> 
    <ProjectConfiguration Include="Debug|ARM"> 
     <Configuration>Debug</Configuration> 
     <Platform>ARM</Platform> 
    </ProjectConfiguration> 
    <ProjectConfiguration Include="Debug|x64"> 
     <Configuration>Debug</Configuration> 
     <Platform>x64</Platform> 
    </ProjectConfiguration> 
    <ProjectConfiguration Include="Debug|x86"> 
     <Configuration>Debug</Configuration> 
     <Platform>x86</Platform> 
    </ProjectConfiguration> 
    <ProjectConfiguration Include="Release|AnyCPU"> 
     <Configuration>Release</Configuration> 
     <Platform>AnyCPU</Platform> 
    </ProjectConfiguration> 
    </ItemGroup> 
</Project> 
"@; 

Select-Xml "//ItemGroup" $xml | % { 
    Write-Host $_.Node.GetType(); 
} 
+2

您可俯瞰命名空間。 – choroba

回答

1

這是因爲默認的命名空間。

嘗試//*[local-name()='ItemGroup']

/*/*[local-name()='ItemGroup']

/*/*

所有這3應該返回ItemGroup

+0

非常感謝!你不知道在PowerShell中做這件事的更簡單的方法,是嗎?有沒有縮寫呢? – ComFreek

+0

@ComFreek - 對不起,我對PowerShell一無所知。唯一的捷徑是XPath 2.0,你可以使用'*'作爲前綴。 ('*:ItemGroup')。 –

+0

PowerShell(實際.NET)不支持XPath 2.0 :( – ComFreek

0

如果你有你的命名空間的前綴,你也可以這樣做:

//prefix:ItemGroup 
+0

該XML來自VS 2012項目文件,我無法更改命名空間。 – ComFreek