当 XPATH 不存在时,s-s-rS 返回具有一行的数据集

Posted

技术标签:

【中文标题】当 XPATH 不存在时,s-s-rS 返回具有一行的数据集【英文标题】:s-s-rS returns a DataSet with One Row when XPATH doesn't exist 【发布时间】:2013-04-04 23:53:57 【问题描述】:

s-s-rS 2008 R2

这本质上是 question 的副本。

...但是那里发布的解决方案对我不起作用。

重要的是要注意,如果有数据,那么对我来说一切正常。

如果您使用无法在 XML 文档中解析的 XPATH 进行查询,为什么 s-s-rS 将返回包含一行的 DataSet?

例如,如果我有一个名为“地址”的数据集:

<Country>
</Country>

我的任何 XPATH 是:

Country/CityStreet

(例如)

我得到一个带有一行的 DataSet,并且该行中的每个字段似乎都是一个错误 - 因为我对其执行的任何操作都失败了。所以我什至不能在它上面放置一个隐藏过滤器,因为我的隐藏表达式无法执行并且该行显示 - 完全空白。

如果有 City 元素,那就没问题了。

在测试我是否尝试创建一个 TextBox 并对该行中的字段执行任何操作时,它们都失败了,即使其中有字符串文字,整个 TextBox 也不会显示。

例如,如果我放置一个带有表达式的文本框:

="Rows: " & CountRows("Address")

我得到了结果:

1

但如果我将同一个文本框(在表格单元格中)更改为:

="Rows: " & CountRows("Address") & " Hide:" & IIF(IsNothing(Fields!Street.Value), "yes", "no")

文本框根本不显示,但表格行仍然被绘制并且是空白的。

我在很多地方都遇到过这种情况,并且总是设法在源 XML 中破解它,但在这种情况下这是不可能的。

DataSet 中的那一行是怎么回事?

【问题讨论】:

...了解到至少您可以使用 IsMissing 来确定某些内容是否完全不存在,但您必须对数据集中的每个元素都执行此操作。仍然很想知道那一排什么都不存在的内容是什么! 【参考方案1】:

向您的 XPath 查询添加一个过滤器以过滤掉空元素。

类似:

Country/CityStreet[string-length(Street) &gt; 0]

或许?

Country/City[string-length(Street) &gt; 0]Street

(我的 XPath 有点生锈了...]

【讨论】:

感谢您的提示 - 问题是我的示例非常简单,实际上这将导致一些极其复杂的 XPath 查询(我正在查看 100 个元素,其中任何一个都可能合法为空)。实际上,我对了解 s-s-rS 在这里所做的事情非常感兴趣。 DataSet 中的那一行代表什么?这是一个行,据我所知,无论如何你都无法与之互动——那么它的目的是什么?也许它包含错误信息,并且有一个保留字段可用于从中检索错误? (只是一个理论,但至少这是有道理的。)

以上是关于当 XPATH 不存在时,s-s-rS 返回具有一行的数据集的主要内容,如果未能解决你的问题,请参考以下文章

SQL s-s-rS 对象已断开连接或在服务器上不存在

当 XPath 验证器返回正确结果时,为啥 XmlNode.SelectNodes 返回空列表?

s-s-rS 返回不正确的 WW

s-s-rS:具有返回同名列的存储过程的报告服务

具有空值的 s-s-rS 输入参数触发报告本身

s-s-rS 报告 - 当用户单击全选选项时,在参数中显示“全部”