【问题标题】:XmlPeek empty string causes failureXmlPeek 空字符串导致失败
【发布时间】:2016-02-02 20:31:19
【问题描述】:

所以在我的目标文件中,我有一行如下所示:

<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”的长度不能为零。

如果我完全删除该属性,它可以正常工作(生成的项目显然是空白并且可以理解)

问题是...我如何在不分块的情况下确定空白属性的值...无论是通过预先测试一个值,还是通过正确处理空白,或其他方式。


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

提前致谢!

【问题讨论】:

    标签: msbuild msbuild-task msbuild-4.0


    【解决方案1】:

    发生错误是因为将空字符串用作项目标识符。我猜标识符不能是空字符串。如果您删除该属性,则结果为 null 并且没有创建任何 Item ,因此不会引发错误。

    也许尝试将结果作为属性而不是项目返回。

    【讨论】:

    【解决方案2】:

    如果您不需要区分被省略的属性与具有空值的属性,您可以通过在查询中插入条件[@AttributeOne!=''] 来防止错误,如下所示。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多