2011-11-09 6 views
1

なぜ以下のxmlが指定されているのでしょうか?最初のchooseinglenode呼び出しは機能しませんが、単一引用符で文字列型を指定していますか?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の要素がテキストを持っているConfigで最初のスキャナのDebugLevelの要素を返します値00199

あなたの第二のアプローチは、次のようにXPath式につながる:

Config/Scanner[DeviceID = 00199]/DebugLevel 

これは、DeviceIDの要素が数値00199を持っているConfigで最初のスキャナのDebugLevelの要素を返します。

最初のアプローチでは00199と正確に一致するだけなので、XMLstuff.DeviceIDが整数または値199の文字列の場合は機能しません。 2番目の方法は、要素のコンテンツが適切な値の整数に評価される限り機能します。したがって、単一引用符は比較の右部分をテキストとして識別します。

XPathは、データ型の変換や比較を行うのにかなり寛容です。

+0

今は理にかなっています。私のxmlstuff.deviceIDプロパティは整数で、xmlファイルから読み込んだとき、それは先行する00をドロップし、なぜその比較が失敗したのか? – TWood

関連する問題