大家好,我想读单个xml, 希望通过一个变量动态读取不同的内容。部分system.xml
<System IDREF="INI_System_01">
  <workflow>aaaaa</workflow>
  ...
<System IDREF="INI_System_02">
  <workflow>bbbbb</workflow>
  ...
<System IDREF="INI_System_03">
  <workflow>cccc</workflow>
  ...
//定义变量。中间的程序会修改这个变量
private string sSelSystemName = "System_01";// 通过xpath读取 xml.
XmlDocument tuningXDoc = new XmlDocument();
tuningXDoc.Load("System.xml");
XmlNodeList workfrowNodeList = tuningXDoc.SelectNodes("/System[@IDREF = string($sSelSystemName)]/*") ;可是始终读不到数据。 请问各位大虾。这个xpath该如何写? 不胜感激。

解决方案 »

  1.   

    ("/System[@IDREF = string($sSelSystemName)]/*") ;
    这不就是个字符串吗?
    ("/System[@IDREF = "+sSelSystemName+"]/*") 
      

  2.   

    <System IDREF="INI_System_03">
    这个节点是LZ你的XML文档的根节点么?如果不是的话tuningXDoc.SelectNodes()会先读取文档的根节点,所以就没有办法读到根节点下面你定义的节点了
      

  3.   


    是的,不是根节点。
    补充一下xml:<Tuning>//root
      <System IDREF="INI_System_01">
        <workflow>aaaaa</workflow>
        ...
      <System IDREF="INI_System_02">
        <workflow>bbbbb</workflow>
        ...
      <System IDREF="INI_System_03">
        <workflow>cccc</workflow>
        ...
    </Tuning>刚才我是把root省略了。整个的写法如下:sSelSystemName是string变量。如果我改成[@IDREF='INI_System_01']就可以。但是我想用变量控制。就不行。
    XmlNodeList workfrowNodeList = tuningXDoc.SelectNodes("/Tuning/System[@IDREF = $sSelSystemName]/*") ;
      

  4.   

    如果我改成[@IDREF='INI_System_01']就可以。但是我想用变量控制。就不行。
    ("/System[@IDREF = '"+sSelSystemName+"']/*")
    少加了单引号
      

  5.   


    问题解决了,非常感谢。但是对于这个表达式'"+sSelSystemName+"'还是不太理解, 能不能请你继续解释一下。