XmlPeek - задача

Возвращает из XML-файла значения, указанные в запросе XPath.

Параметры

В следующей таблице приводятся параметры задачи XmlPeek.

Параметр Описание
Namespaces Необязательный параметр String.

Задает пространства имен для префиксов запроса XPath.
Query Необязательный параметр String.

Указывает запрос XPath.
Result Необязательный выходной параметр ITaskItem[] .

Содержит результаты, возвращаемые этой задачей.
XmlContent Необязательный параметр String.

Указывает входные данные XML в виде строки.
XmlInputPath Необязательный параметр ITaskItem.

Указывает входные данные XML в виде пути к файлу.

Замечания

Помимо параметров, перечисленных в таблице, эта задача наследует параметры от класса TaskExtension, который сам является производным от класса Task. Список этих дополнительных параметров и их описания см. в статье Базовый класс TaskExtension.

Пример

Вот примера XML-файла settings.config для чтения:

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

В этом примере для чтения value следует использовать код наподобие следующего:

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

В пространствах имен XML используется параметр Namespaces, как показано в следующем примере. Входной XML-файл 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>

Следующий объект Target определяется в файле проекта:

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

Выходные данные включают следующее из целевого объекта 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>

См. также