我正在尝试一个非常基本的XPath在
this xml(如下),它没有找到任何东西.
我正在尝试.NET和 this website,XPaths(如PropertyGroup,/ PropertyGroup和// MSBuildCommunityTasksPath)根本不适用于我(他们编译但返回零结果).
我正在尝试.NET和 this website,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>
您可以在代码和所有这些中添加命名空间,但可以有效地通配名称空间.尝试以下XPath成语.
//*[local-name()='PropertyGroup'] //*[local-name()='MSBuildCommunityTasksPath']
name()通常也可以正常工作,如:
//*[name()='PropertyGroup'] //*[name()='MSBuildCommunityTasksPath']
编辑:命名空间是伟大的,我不是建议他们不重要,但通配符在派对原型代码,一次性桌面工具,实验XSLT等方面很方便.平衡您的便利需求,以防止手头任务的可接受风险.如果需要,您还可以剥离或重新命名名称空间.