문제

려고 노력해요 아주 기본적인 XPath 에 이 xml (아래),그리고 그것은 하지 않습니다.내가 노력하고있다.물 이 웹사이트, 고 Xpath 등 //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()='PropertyGroup']
//*[name()='MSBuildCommunityTasksPath']

편집: 네임스페이스대 고 나는 그들은 중요하지 않지만,와일드카드 그들에게 편리할 때 cobbling 함께 시제품 코드,one-off 데스크탑 도구와 실험,XSLT 등도 있습니다.의 균형의 편의를 위해 필요한에 대해 허용 가능한 위험에 대한 작업을 손에 있습니다.참고로,필요한 경우,당신은 또한 스트립 또는 할당 네임스페이스입니다.

다른 팁

태그에 이 문서 끝에 있는"기본"네임스페이스에 의해 만들어 xmlns 특성 없는 접두어.불행하게도,XPath 혼자 할 수 없습 쿼리에 있는 요소 기본 네임스페이스가 있습니다.나는 실제로는 확실하지 않의 의미 정보,하지만 당신은 명시적으로 첨부하여 접두사하는 네임스페이스을 사용하여 어떤 도구 호스팅 XPath.

이 있을 수 있습 짧은 방법이다.순 있지만,유일한 방법은 본를 통해 NameSpaceManager.후에 당신은 명시적으로의 네임스페이스를 추가할 수 있습 쿼리를 사용하는 네임스페이스 관리자로 모든 범주에서는 네임스페이스의 요소가는 접두어(I'을 선택했 msbuild'):

using System;
using System.Xml;

public class XPathNamespace {
    public static void Main(string[] args) {
        XmlDocument xmlDocument = new XmlDocument();
        xmlDocument.LoadXml(
    @"<?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>");

        XmlNamespaceManager namespaceManager = new
    XmlNamespaceManager(xmlDocument.NameTable);
        namespaceManager.AddNamespace("msbuild", "http://schemas.microsoft.com/developer/msbuild/2003");
        foreach (XmlNode n in xmlDocument.SelectNodes("//msbuild:MSBuildCommunityTasksPath", namespaceManager)) {
            Console.WriteLine(n.InnerText);
        }
    }
}

귀하의 문제는 네임스페이스(xmlns="http://schemas.microsoft.com/developer/msbuild/2003").를 받로 노드지 않기 때문에 자격으로 네임스페이스가 있습니다.을 제거하는 경우 xmlns 특성하"//PropertyGroup"XPath 작동합니다.는 방법을 쿼리와 네임스페이스는 일반적으로 포함싱 기본 xmlns 을 식별자(때문에 하나를 지정하지 않는 특성에서)선택하여 다음과 같"//myXMLNStoken:PropertyGroup".

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top