首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用XmlPoke创建或更新元素的值

如何使用XmlPoke创建或更新元素的值
EN

Stack Overflow用户
提问于 2022-09-15 16:34:52
回答 1查看 57关注 0票数 1

在MSBuild目标中,我需要将XML元素的值设置为特定值。如果该元素不存在,我需要创建它。我试图使用MSBuild的XmlPoke任务来实现这一点,但是只有当元素已经存在时,它才能工作。下面是一个例子:

要更新的XML内容:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest>
  <metadata>
    <name>whatever</name>
    <version>1.2.3.4</version>
  </metadata>
</manifest>

使用如下所示的XmlPoke,我可以成功地设置version元素的值:

代码语言:javascript
复制
<XmlPoke
  XmlInputPath="$(XmlFilePath)"
  Query="/manifest/metadata/version"
  Value="4.3.2.1" />

其结果如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest>
  <metadata>
    <name>whatever</name>
    <version>4.3.2.1</version>
  </metadata>
</manifest>

但是,如果输入缺少version元素,如下面所示,XmlPoke任务不会执行任何操作:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest>
  <metadata>
    <name>whatever</name>
  </metadata>
</manifest>

如果version元素不存在,我如何创建它并将其设置为4.3.2.1;如果使用MSBuild标准功能,只需将其设置为4.3.2.1即可?

编辑:

XmlPeekXmlPoke结合在一起的公认答案是有效的。基于这个答案,下面是插入或更新值的代码:

代码语言:javascript
复制
<XmlPeek
   XmlInputPath="$(XmlFilePath)"
   Query="/manifest/metadata/version">
   <Output
      TaskParameter="Result"
      ItemName="VersionEntry" />
</XmlPeek>
<XmlPoke
   Condition="'@(VersionEntry)' != ''"
   XmlInputPath="$(XmlFilePath)"
   Query="/manifest/metadata/version"
   Value="4.3.2.1" />
<XmlPoke
   Condition="'@(VersionEntry)' == ''"
   XmlInputPath="$(XmlFilePath)"
   Query="/manifest/metadata"
   Value="&lt;Name&gt;whatever&lt;/Name&gt;&lt;Version&gt;4.3.2.1&lt;/Version&gt;" />
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-15 18:50:40

XmlPoke使用指定的XPath ( Query )查找匹配的节点。如果它找到一个节点,它将用指定的InnerXml替换Value。每一场比赛它都会这样做。如果没有匹配,XmlPoke什么也不做。

使用标准MSBuild功能的方法:

使用XmlPeek测试/manifest/metadata/version

如果存在version,则使用XmlPoke进行更新。

如果不存在version

/manifest/metadata.

  • Create

  • 使用XmlPeek获取/manifest/metadata.

的内容,这是一个由metadata的现有内容组成的替换值,使用<version>$(ver)</version> appended.

  • Use XmlPoke来更新/manifest/metadata.

如果这看起来很麻烦的话,你可以写一个内联的任务,上面写的版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73734665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档