XmlPeek空字符串导致失败

时间:2016-02-02 20:31:19

标签: msbuild msbuild-task msbuild-4.0

所以在我的目标文件中,我有一行看起来像这样:

<XmlPeek Namespaces="" XmlInputPath="file.xml" Query="/data/@AttributeOne">
  <Output TaskParameter="Result" ItemName="my_AttributeOne" />
</XmlPeek>

在“file.xml”中,我有:

<data AttributeOne="abc" AttributeTwo="def" />

它还会读取其他一些属性。

当属性有数据时,一切正常......但是当我将AttributeOne作为空字符串(“”)时,XmlPeek会出现以下错误:

  

无法从“Result”参数中检索“XmlPeek”任务的输出。参数“includeEscaped”的长度不能为零。

如果我完全删除属性,它可以正常工作(结果项显然是可以理解为空白)

问题是......如何在没有吹出块的情况下确定空白属性的值......是通过预先测试值,还是通过正确处理空白或其他方法。

约束:唯一真正的要求就是坚持内置任务(XmlPeek)......我知道社区任务中的XmlRead ......出于各种原因,我想要使用外部任务-box任务。

提前致谢!

2 个答案:

答案 0 :(得分:1)

发生错误是因为空字符串被用作项标识符。我猜标识符不能是空字符串。如果删除该属性,则结果为null,并且不创建任何Item,这就是为什么不会抛出错误。

也许尝试将结果作为Property而不是Item返回。

答案 1 :(得分:0)

如果您不需要区分被省略的属性与具有空值的属性,则可以通过将条件The HTTP method 'OPTIONS' of the incoming request (with URI 'http://foo:0451/bar/Login') is not allowed. 插入查询来防止错误,如下所示。

[@AttributeOne!='']