使用xpath语法混淆选择xml节点

时间:2011-11-09 19:13:24

标签: xml vb.net xpath

鉴于下面的xml,为什么第一个chooseinglenode调用不起作用,但第二个调用不起作用?单引号是否指定字符串类型?

Dim dbglvlnode As Xml.XmlNode = doc.SelectSingleNode(String.Format("Config/Scanner[DeviceID = '{0}']/DebugLevel", XMLstuff.DeviceID))
Dim dbglvlnode As Xml.XmlNode = doc.SelectSingleNode(String.Format("Config/Scanner[DeviceID = {0}]/DebugLevel", XMLstuff.DeviceID))
<?xml version="1.0" standalone="yes"?>
<Config>
 <Scanner>
  <!--Test Scanner-->
  <DeviceID>00199</DeviceID>
  <DeviceNumber>0099</DeviceNumber>
  <DebugLevel>10</DebugLevel>
 </Scanner>
</Config>

1 个答案:

答案 0 :(得分:1)

您的第一种方法会导致XPath表达式如下:

Config/Scanner[DeviceID = '00199']/DebugLevel

这将返回Config中第一个Scanner的DebugLevel元素,其中DeviceID元素具有文本值00199

你的第二种方法会导致像这样的XPath表达式:

Config/Scanner[DeviceID = 00199]/DebugLevel

这将返回Config中第一个Scanner的DebugLevel元素,其中DeviceID元素的数字值为00199

不同之处在于第一种方法只能与00199完全匹配,因此如果XMLstuff.DeviceID是整数或值为199的字符串,则它将无效。只要元素的内容求值为具有正确值的整数,第二种方法就会起作用。所以,是的,单引号将比较的右手部分标识为文本。

XPath在转换数据类型和进行比较时相当宽松。