当我应该使用data()
函数时,我无法理解。
例:
$path/@name
或$path/data(@name)
?
有时当我没有放data()
时,我得到一个错误,我只能添加它。
答案 0 :(得分:3)
通常,当您要提取存储在XML中并由架构定义的值的原子类型时,应使用data()
。例如,假设您有一个将此元素定义为xs:dateTime
的模式:
<my-time>2016-01-28T10:30:45.954716-06:00</my-time>
在data()
上拨打<my-time>
将返回xs:dateTime
类型值。
但大多数时候,data()
的行为与string()
完全相同。我怀疑你的代码中有时候你期待一个字符串但是返回一个属性或节点。有时候&#34;只是工作&#34;因为类型强制;其他时候,它会引发异常。这当然取决于您的代码。
密切关注代码中的节点类型和原子值,并且应该更清楚地了解为什么会出现这些错误。如果您想要的是字符串,请使用string()
代替data()
。
答案 1 :(得分:1)
很少需要明确调用data()
。几乎所有期望原子值的操作都可以被赋予一个节点并隐式地将其原子化(即,调用data()
)。
有一些例外:
节点序列N的有效布尔值与data(N)
的有效布尔值不同。例如,if (@married)
测试@married
属性是否存在,而if (data(@married))
测试@married
属性的类型值是否为真。
在XQuery中构造元素内容时,节点不会被隐式雾化,因此<e>{@married}</e>
会执行与<e>{data(@married)}</e>
不同的