比如在节点下有个test属性,我用xPath搜索这个属性,但属性@test的值不能为'a',如果属性值为'a'视为不可见。.//*/@test[text() != 'a']我试图用上面的xPath,但搜不到东西,请问解决办法?

解决方案 »

  1.   

    try:.//*[@test <> 'a']
      

  2.   

    如果不行,贴出你的xml文档看看
      

  3.   

    谢谢你,以下是可行的,但不是我想要的
    .//*[ @test != 'a']/@test
    我要求是在属性下检测值,不知道是否可行?
    也就是先找到属性,再检测值,并不是在节点下检测值
      

  4.   

    .//*/@*[ name() = 'test1' or name() = 'test2']也就是只要找到属性就行了,只要@*的值不等于'a'就行。呵呵,谢谢你的解答,讨论一下,有时我们总想把所有事情放在xPath下完成。
      

  5.   

    <root>
      <item test="a" />
      <item test="b" />
    </root>比如上面的xml。你是想找到test="b"的item节点吗?
      

  6.   

    说了半天没明白什么意思
    最好给个XML文件的例子做说明
    另外没有test属性的节点算不算?
      

  7.   

    是呀,我是想找到属性,在.NET下有个Xml.XmlAttribute类的我要找到的是test="b"属性,test="a"是我不想要的
      

  8.   

    我们总想把所有事情放在xPath下
    xpath是很方便的。只要用的好,很简单
      

  9.   

    http://support.microsoft.com/kb/308333/zh-cn
      

  10.   

    返回Xmlnode就知道,不知道要怎么只返回attribute
      

  11.   

    其实返回XmlNode,然后取属性值不好嘛,为什么一定要只返回attribute的了?
      

  12.   

    msdn里说的已经很详细了吧ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/WD_XMLStd/html/6da1b6e3-256e-4919-8848-53b425f72ed1.htm
      

  13.   

    XmlNodeList node = doc.SelectNodes("//*[not(@test) or @test != 'a']");
    返回所有包含test属性并且不等于a或者不包含test属性的节点得到节点可以利用XmlNode.Attributes来获得属性的值
      

  14.   

    终于找到答案了原来不能这样写 .//*/@test[text() != 'a']这样写才对 .//*/@test[. != 'a'] 呵呵