当 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) > 0]
或许?
Country/City[string-length(Street) > 0]Street
(我的 XPath 有点生锈了...]
【讨论】:
感谢您的提示 - 问题是我的示例非常简单,实际上这将导致一些极其复杂的 XPath 查询(我正在查看 100 个元素,其中任何一个都可能合法为空)。实际上,我对了解 s-s-rS 在这里所做的事情非常感兴趣。 DataSet 中的那一行代表什么?这是一个行,据我所知,无论如何你都无法与之互动——那么它的目的是什么?也许它包含错误信息,并且有一个保留字段可用于从中检索错误? (只是一个理论,但至少这是有道理的。)以上是关于当 XPATH 不存在时,s-s-rS 返回具有一行的数据集的主要内容,如果未能解决你的问题,请参考以下文章