2011-11-09 41 views
1

鑑於下面的xml,爲什麼第一個選擇單節點調用不起作用,但第二個調用不起作用?單引號是指定一個字符串類型還是什麼?使用xpath語法混淆選擇xml節點

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

你的第一種方法會導致XPath表達式排序是這樣的:

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

這將返回在配置第一個掃描儀爲其; DeviceID元素具有文本的DEBUGLEVEL元素價值00199

你的第二個方法將導致XPath表達式是這樣的:

Config/Scanner[DeviceID = 00199]/DebugLevel 

這將返回在配置所述第一掃描儀的量,的DeviceID元素具有數字00199的DEBUGLEVEL元件。

區別在於第一種方法只能匹配00199,所以如果XMLstuff.DeviceID是一個整數或值爲199的字符串,它將不起作用。只要元素的內容評估爲具有正確值的整數,第二種方法就會工作。所以是的,單引號將比較的右側部分標識爲文本。

XPath在轉換數據類型和進行比較時相當寬鬆。

+0

現在有意義。我的xmlstuff.deviceID屬性是一個整數,當我從xml文件中讀取它時,它會丟棄前導00,因此比較失敗。 – TWood