0

我在从 msbuild 文件中获取数据时遇到问题,其中有以下内容:

<Application Include="ABC">
...
/Application>
<Application Include="XYZ">
        <Parameters>
                <Param name="param1">valueOfIt</Param>
                        <Param name="param2">value2</Param>
                </Parameters>
</Application>

我可以<Param>这样<Parameters>

<FindInList CaseSensitive="false" List="@(Application)" ItemSpecToFind="$(Application)"> <Output TaskParameter="ItemFound" ItemName="Parameters"/> </FindInList>

然后<Message Text="@(Parameters->'%(Parameters)'))"/>显示一个带有 all 的 xml <Param>。我需要使用 param1 中的值创建一个属性...如何解析这个?

4

1 回答 1

1

如果您只对静态 ItemGroup 感兴趣,您可以使用 XmlPeek(此答案的灵感来自

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">

<ItemGroup>
    <Application Include="ABC">
    </Application>
    <Application Include="XYZ">
            <Parameters>
                    <Param name="param1">valueOfIt</Param>
                    <Param name="param2">value2</Param>
            </Parameters>
    </Application>
</ItemGroup>


<Target Name="Sample">
    <XmlPeek Namespaces="&lt;Namespace Prefix='msb' Uri='http://schemas.microsoft.com/developer/msbuild/2003'/&gt;"
                 XmlInputPath="$(MSBuildProjectFile)" 
                 Query="/msb:Project/msb:ItemGroup/msb:Application/msb:Parameters/msb:Param[@name='param1']/text()">
            <Output TaskParameter="Result" PropertyName="PeekedParam1" />
        </XmlPeek>
        <Message Text="'$(PeekedParam1)'" />
  </Target>
</Project>
于 2013-09-02T20:41:07.843 回答