我的XPath/XML出了什么问题?

rip*_*234 10 xml xpath namespaces

我在这个xml上尝试一个非常基本的XPath (与下面相同),它没有找到任何东西.我正在尝试.NET和这个网站,以及XPaths等//PropertyGroup,/PropertyGroup并且//MSBuildCommunityTasksPath根本不适合我(他们编译但返回零结果).

源XML:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <!-- $Id: FxCop.proj 114 2006-03-14 06:32:46Z pwelter34 $ -->
    <PropertyGroup>
        <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\MSBuild.Community.Tasks\bin\Debug</MSBuildCommunityTasksPath>
    </PropertyGroup>
    <Import
        Project="$(MSBuildProjectDirectory)\MSBuild.Community.Tasks\MSBuild.Community.Tasks.Targets" />
    <Target Name="DoFxCop">
        <FxCop TargetAssemblies="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll"
            RuleLibraries="@(FxCopRuleAssemblies)" 
            AnalysisReportFileName="Test.html"
            DependencyDirectories="$(MSBuildCommunityTasksPath)" 
            FailOnError="True"
            ApplyOutXsl="True"
            OutputXslFileName="C:\Program Files\Microsoft FxCop 1.32\Xml\FxCopReport.xsl" />
    </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

b w*_*b w 15

您可以在代码中添加名称空间以及所有这些名称空间,但您可以有效地对名称空间进行通配符.尝试以下XPath习语.

//*[local-name()='PropertyGroup']
//*[local-name()='MSBuildCommunityTasksPath']
Run Code Online (Sandbox Code Playgroud)

name()通常也可以,如下所示:

//*[name()='PropertyGroup']
//*[name()='MSBuildCommunityTasksPath']
Run Code Online (Sandbox Code Playgroud)

编辑:命名空间很棒,我并不是说它们并不重要,但是在拼凑原型代码,一次性桌面工具,试验XSLT等等时,通配它们会派上用场.平衡您的方便需求与手头任务的可接受风险.仅供参考,如果需要,您还可以剥离或重新分配名称空间.