鉴于下面的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>
答案 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在转换数据类型和进行比较时相当宽松。