<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z="#RowsetSchema">
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:updatable='true'>
<s:AttributeType name='c0' rs:name='门店号' rs:number='1'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='3' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='c1' rs:name='开始日期' rs:number='2'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='19' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='c2' rs:name='结束日期' rs:number='3'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='19' rs:maybenull='false'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row c0='001' c1='2011-02-16 16:23:40' c2='2011-02-16 16:24:27'/>
</rs:data>
</xml>
这是XML文档,我想取最后<rs:data>中的数据,但获取不到该节点,大侠们帮我看看怎么回事
doc = null; //xml文档
root = null; // xml文档的根元素(节点)
XmlNamespaceManager nsmgr = null; //xml文档的名空间管理器
XmlDocument doc = new XmlDocument();
doc.Load(xmlFile.FullName); //载入文件
XmlElement root = doc.DocumentElement;
string nameSpace = root.NamespaceURI;
nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("rs", nameSpace);
XmlNode node = root.SelectSingleNode("rs:data", nsmgr); //该处node一直为null不知怎么回事?
这xml文档的名称空间显的过于复杂了点,没具体操作过多名称空间,不太好说。
感觉像是selectsinglenode的xpath参数错误。。。
"rs:data" 前面加个‘/’看看,应该就解决问题了
还有,第二个参数命名空间好像不是这么用的,建议MSDN查查看看
其实,如果rs:data如果总是最后一个node的话,直接childnode[childnode.length - 1]算了,呵呵,不过这不是什么好的办法
首先,你的根元素的名称是 xml ,这是一个保留字,不应该起这个元素名称。比如可以修改为 root 等等。
第二,你使用命名空间的方式有问题。
下面的程序可以正确取得这个元素。
修改之后的 xml 文档。
<?xml version="1.0" encoding="utf-8" ?>
<root xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z="#RowsetSchema">
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:updatable='true'>
<s:AttributeType name='c0' rs:name='门店号' rs:number='1'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='3' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='c1' rs:name='开始日期' rs:number='2'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='19' rs:maybenull='false'/>
</s:AttributeType>
<s:AttributeType name='c2' rs:name='结束日期' rs:number='3'>
<s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='19' rs:maybenull='false'/>
</s:AttributeType>
<s:extends type='rs:rowbase'/>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row c0='001' c1='2011-02-16 16:23:40' c2='2011-02-16 16:24:27'/>
</rs:data>
</root>
读取的程序
class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.Load("XMLFile1.xml");
XmlNamespaceManager nm = new XmlNamespaceManager(doc.NameTable);
nm.AddNamespace("rs", "urn:schemas-microsoft-com:rowset");
nm.AddNamespace("s", "uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882");
nm.AddNamespace("dt", "uuid:C2F41010-65B3-11d1-A29F-00AA00C14882");
nm.AddNamespace("z", "#RowsetSchema");
string xpath = "/root/rs:data";
XmlNode node = doc.SelectSingleNode(xpath, nm );
Console.WriteLine(node.Name);
}
}
希望能解决你的问题。