首页 > 解决方案 > XmlPoke 任务修剪值

问题描述

有没有办法使用以空格结尾的值作为 XmlPoke 值?当我执行任务时,值被替换但最后没有空格。

再生产:

测试目标:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Build">
        <Copy SourceFiles="test.xml" DestinationFiles="output.xml"/>
        <XmlPoke Query="/root/element/@attr[.='replaceme']|/root/replaceme" Value="X " XmlInputPath="output.xml"/>
    </Target>
</Project>

测试.xml:

<root>
    <element attr="replaceme" />
    <replaceme/>
</root>

当我运行时:

MSBuild /v:detailed test.targets

我得到 output.xml 没有空格:

<root>
  <element attr="X" />
  <replaceme>X</replaceme>
</root>

有没有办法强制 XmlPoke 设置正确的值(最后有空格)?

标签: c#xpathmsbuildmsbuild-taskxmlpoke

解决方案


值是 MSBuild “项目”通常,项目代表文件路径,MSBuild 以特殊(秘密)方式处理这些。

因此,问题与 XML 转义无关,而是与 MSBuild item escaping相关。这是您可以强制使用空格字符的方法:

<XmlPoke ... Value="X%20" ... />

推荐阅读