2012-05-03 74 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