问题一  
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <!--comment1-->
  <element1>element1</element1>
  <element2>elemen2</element2>
  <!--comment2-->
  <!--comment3-->
  <!--comment4-->
  <element3>element3</element3>
</root>这个XML文件有些comment,我要选择element节点 比如<element1>到<element3>
用XPath 怎么查询呢?问题二
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <Class1>
    <Class11>
      <Class111>111</Class111>
      <Class112>112</Class112>
    </Class11>
    <Class12>12</Class12>
    <Class13>13</Class13>
  </Class1>
  <Class2>
    <Class21>21</Class21>
    <Class22>22</Class22>
    <Class23>23</Class23>
  </Class2>
  <Class3></Class3>
</root>我要选择所有含有文本的节点,该怎么查询呢?

解决方案 »

  1.   

    第一个
    /root/*[not(comment())]第二个
    //text()/..
      

  2.   

    TO:问题一
    没有完全明白你的需求,如果Xml是这种形式:
    <?xml version="1.0" encoding="utf-8" ?>
    <root>
      <comment1>comment1</comment1>
      <element>element1</element>
      <element>elemen2</element>
      <comment2>comment2</comment2>
      <comment3>comment3</comment3>
      <element>element3</element>
    </root>
    直接用:/root/element,示例如下:
     XPathDocument document = new XPathDocument("../../x.xml");
                XPathNavigator navigator = document.CreateNavigator();
                XPathNodeIterator nodes = navigator.Select("/root/element");            
                while (nodes.MoveNext())
                {
                    Console.WriteLine(nodes.Current.Name);
                }
    输出:
    element
    element
    element如果这样:
    <?xml version="1.0" encoding="utf-8" ?>
    <root>
      <comment1>comment1</comment1>
      <element1>element1</element1>
      <element2>elemen2</element2>
      <comment2>comment2</comment2>
      <comment3>comment3</comment3>
      <element3>element3</element3>
    </root>
    可以这样用:/root/*[starts-with(name(),'element')]
    示例如下:
    XPathDocument document = new XPathDocument("../../x.xml");
                XPathNavigator navigator = document.CreateNavigator();
                XPathNodeIterator nodes = navigator.Select("/root/*[starts-with(name(),'element')]");            while (nodes.MoveNext())
                {
                    Console.WriteLine(nodes.Current.Name);
                }
    输出:
    element1
    element2
    element3
      

  3.   

    TO:问题二
    可以用//*[text()],示例如下:
    XPathDocument document = new XPathDocument("../../x.xml");
                XPathNavigator navigator = document.CreateNavigator();
                XPathNodeIterator nodes = navigator.Select("//*[text()]");
                while (nodes.MoveNext())
                {
                    Console.WriteLine(nodes.Current.Name);
                }输出:
    Class111
    Class112
    Class12
    Class13
    Class21
    Class22
    Class23