org.dom4j.Document selectNodes 找不到节点问题

来源:互联网 发布:linux配置网络命令 编辑:程序博客网 时间:2024/06/05 18:14

      今天弄了一下午,xpath配置也没有错,就是找不到节点,翻了很多资料才知道是xml命名空间的问题,类似<html xmlns="http://www.w3.org/1999/xhtml"> 最终把xmlns="http://www.w3.org/1999/xhtml" 去掉,OK找到节点,像是System.Xml.XmlDocument.SelectNodes() 这样的SelectNodes()也存在上面的问题,就是看的他的文章,借用他的说明一下,呵呵。

   以下内容为转载:

今天在使用xmldocument.selectnodes()函数时遇到查询满足一定条件的节点时,无法查找到相应的节点。

后来google了一下,原来是自定义名字空间惹的祸。

下面是xml文件内容:

<?xml version="1.0" encoding="utf-8"?>

<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">

 <aaaa>

   <bbbb>1234</bbb>

   <bbbb>4567</bbbb>

   <bbbb>8989</bbbb>

</Report>

-----------------------------------------------------------------------------------------

using System.Xml;

public class aaaa

{

    public void Search1()

   {//我用下列代码查询 无节点

      XmlDocument xmlDoc = new  XmlDocument();

        xmlDoc.Load("*.xml");

        string filter = "//*[contains(bbbb,'8989']";

        XmlnodeList list = xmlDoc.SelectNodes(filter);//此处查询的节点个数为0

   }

 

   public void Search2()

   {//用这个方法就可以查询到了

      XmlDocument xmlDoc = new  XmlDocument();

        xmlDoc.Load("*.xml");

        XmlNamespaceManager m = new XmlNamespaceManager ( xmldoc.NameTable );

        m.AddNamespace("ab",

"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");


        string filter = "//ab:*[contains(ab:bbbb,'8989']";

        XmlnodeList list = xmlDoc.SelectNodes(filter);//此处查询的节点个数为1

   } 

}

 

当使用xmldocument.selectnodes()时,如果xml文件中有自定义的名字空间的话,在使用selectnodes()函数时,增加名字空间。 

原创粉丝点击