Skip to content

Latest commit

 

History

History
113 lines (94 loc) · 4.04 KB

xmlpeek-task.md

File metadata and controls

113 lines (94 loc) · 4.04 KB
title description ms.date ms.topic dev_langs helpviewer_keywords author ms.author manager ms.subservice
XmlPeek Task
Learn how MSBuild uses the XmlPeek task to return values as specified by XPath Query from an XML file.
11/04/2016
reference
VB
CSharp
C++
XmlPeek task [MSBuild]
MSBuild, XmlPeek task
ghogen
ghogen
mijacobs
msbuild

XmlPeek task

Returns values as specified by XPath Query from an XML file.

Parameters

The following table describes the parameters of the XmlPeek task.

Parameter Description
Namespaces Optional String parameter.

Specifies the namespaces for the XPath query prefixes.
Query Optional String parameter.

Specifies the XPath query.
Result Optional xref:Microsoft.Build.Framework.ITaskItem[] output parameter.

Contains the results that are returned by this task.
XmlContent Optional String parameter.

Specifies the XML input as a string.
XmlInputPath Optional xref:Microsoft.Build.Framework.ITaskItem parameter.

Specifies the XML input as a file path.

Remarks

In addition to having the parameters that are listed in the table, this task inherits parameters from the xref:Microsoft.Build.Tasks.TaskExtension class, which itself inherits from the xref:Microsoft.Build.Utilities.Task class. For a list of these additional parameters and their descriptions, see TaskExtension base class.

Example

Here is a sample XML file settings.config to read:

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

In this example, if you want to read value, then use code like the following:

<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>

With XML namespaces, you use the Namespaces parameter, as in the following example. With the input XML file 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>

And the following Target defined in a project file:

  <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>

The output includes the following from the TestPeek target:

  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>

See also