2012-05-03 44 views
2

我有下面的C#代碼:Xpath的錯誤有一個無效的令牌

var selectNode = xmlDoc.SelectSingleNode("//CodeType[@name='" + codetype + 
    "']/Section[@title='" + section + "']/Code[@code='" + code + "' and 
    @description='" + codedesc + "']") as XmlElement; 

運行我的代碼,它引發錯誤說:「上面的語句無效令牌」

這些都是值爲上述說法。

codeType=cbc 
section="Mental" 
codedesc="Injection, enzyme (eg, collagenase), palmar fascial cord (ie, 
    Dupuytren's contracture" 
+0

你介意粘貼你的xml樣本嗎? –

+1

在我的情況下,我收到錯誤消息,因爲我忘記了用「]」字符關閉XPath表達式。 –

回答

5

注意在codedesc撇號(')?

你需要以某種方式逃避它。 XPath解釋器認爲它是一個字符串分隔符,不知道如何處理其後的另一個撇號。

你可以做到這一點的一種方法是把你的字符串用雙引號括起來,而不是撇號。

因此您的代碼將變成:

var selectNode = xmlDoc.SelectSingleNode(
    "//CodeType[@name='" + codetype + "']" + 
    "/Section[@title='" + section + "']" + 
    "/Code[@code=\"" + code + "' and @description='" + codedesc + "\"]") 
    as XmlElement; 

(注意,在第四行中,單引號(')成爲雙引號(\"))

雖然這種方法對你的作品所呈現的數據,你仍然不是100%安全的:其他記錄本身可能包含雙引號。如果發生這種情況,我們也需要爲這種情況考慮一些事情。

+0

非常感謝,我會找到方法在我的codedesc數據中獲得撇號。 – user1373355

-2

複製的單引號,以便它的內容「掌腱膜攣縮的攣縮」

這樣你就可以逃避XPath表達式的單引號。

+0

這沒有奏效 – Prabu