Tarefa XmlPeek

Retorna os valores conforme especificado por uma consulta de XPath em um arquivo XML.

Parâmetros

A tabela a seguir descreve os parâmetros da tarefa XmlPeek.

Parâmetro Descrição
Namespaces Parâmetro String opcional.

Especifica os namespaces para prefixos de consulta do XPath.
Query Parâmetro String opcional.

Especifica a consulta do XPath.
Result Parâmetro de saída ITaskItem[] opcional.

Contém os resultados que são retornados por essa tarefa.
XmlContent Parâmetro String opcional.

Especifica a entrada XML como uma cadeia de caracteres.
XmlInputPath Parâmetro ITaskItem opcional.

Especifica a entrada XML como um caminho de arquivo.

Comentários

Além de ter os parâmetros listados acima, essa tarefa herda parâmetros da classe TaskExtension, que herda da classe Task. Para obter uma lista desses parâmetros adicionais e suas descrições, confira Classe base TaskExtension.

Exemplo

Aqui está um arquivo XML de exemplo settings.config a ser lido:

<appSettings>
  <add key="ProjectFolder" value="S1" />
</appSettings>

Neste exemplo, se você quiser ler value, use este código:

<Target Name="BeforeBuild">
    <XmlPeek XmlInputPath="settings.config" Query="appSettings/add[@key='ProjectFolder']/@value">
        <Output TaskParameter="Result" ItemName="value" />
    </XmlPeek>
    <Message Text="Using project folder @(value)." Importance="high" />
    <PropertyGroup>
        <ProjectFolder>@(value)</ProjectFolder>
    </PropertyGroup>
    <ItemGroup>
        <Compile Include="Projects\$(ProjectFolder)\Controls\Control1.ascx.cs">
            <SubType>ASPXCodeBehind</SubType>
        </Compile>
    </ItemGroup>
</Target>

Com namespaces XML, use o parâmetro Namespaces, como no exemplo a seguir. Com o arquivo XML de entrada XMLFile1.xml:

<?xml version="1.0" encoding="UTF-8"?>
<class AccessModifier='public' Name='test' xmlns:s='http://nsurl'>
  <s:variable Type='String' Name='a'>This</s:variable>
  <s:variable Type='String' Name='b'>is</s:variable>
  <s:variable Type='String' Name='c'>Sparta!</s:variable>
  <method AccessModifier='public static' Name='GetVal' />
</class>

E o seguinte Target definido em um arquivo de projeto:

  <Target Name="TestPeek" BeforeTargets="Build">
    <!-- Find the Name attributes -->
    <XmlPeek XmlInputPath="XMLFile1.xml"
             Query="//s:variable/@Name"
             Namespaces="&lt;Namespace Prefix='s' Uri='http://nsurl' /&gt;">
      <Output TaskParameter="Result" ItemName="value1" />
    </XmlPeek>
    <Message Text="@(value1)"/>
    <!-- Find 'variable' nodes (XPath query includes ".") -->
    <XmlPeek XmlInputPath="XMLFile1.xml"
             Query="//s:variable/."
             Namespaces="&lt;Namespace Prefix='s' Uri='http://nsurl' /&gt;">
      <Output TaskParameter="Result" ItemName="value2" />
    </XmlPeek>
    <Message Text="@(value2)"/>
  </Target>

A saída inclui o seguinte do destino TestPeek:

  TestPeek output:
  a;b;c
  <s:variable Type="String" Name="a" xmlns:s="http://nsurl">This</s:variable>;<s:variable Type="String" Name="b" xmlns:s="http://nsurl">is</s:variable>;<s:variable Type="String" Name="c" xmlns:s="http://nsurl">Sparta!</s:variable>

Confira também