我试过如下:
XmlDocument doc=new XmlDocument();
doc.Load(Path);
XmlNodeList oNodeList=doc.GetElementByTagname("NS:Text");
这里我得到了所有具有“NS:Text”命名空间的节点。但我需要选择以下所有节点:
XmlDocument doc=new XmlDocument();
doc.Load(Path);
XmlNodeList oNodeList=doc.GetElementByTagname("NS");
这样我就可以选择包含命名空间“NS”的所有节点。但这不起作用。我们怎样才能做到这一点?
以下是我的XML格式。
<xml 1.0 ?>
<Root xmlns:NS="www.yembi.com">
<NS:Entry Value="User">
<table>
<tr>
<td>
<NS:display type="Label" name="First Name">
</td>
</tr>
<tr>
<td>
<NS:Text type="Text">
</td>
</tr>
<tr>
<td>
<NS:Button Type="SubmitButton" name="submit">
</td>
</tr>
</table>
</NS:Entry>
答案 0 :(得分:1)
如果您使用.net framework 3.5或更高版本,我想建议使用LINQ to XML。
XDocument doc = XDocument.Load(Path);
XNamespace ns = "www.yembi.com";
var result = doc.Root.Descendants()
.Where(p => p.GetPrefixOfNamespace(ns) == "NS");
答案 1 :(得分:0)
您可以将XPath表达式与SelectNodes
method一起使用。
XmlDocument doc = new XmlDocument();
doc.Load(Path);
XmlNamespaceManager mgr = new XmlNamespaceManager(doc.NameTable);
mgr.AddNamespace("NS", "www.yembi.com");
XmlNodeList oNodeList = doc.SelectNodes("//NS:*", mgr);
XPath表达式//NS:*
选择具有NS
前缀的任何元素。
关于您的问题的一个注释:NS
不是Xml文档中的命名空间,它只是一个命名空间前缀。 www.yembi.com
是您的命名空间。
您可以将前缀视为本地(在文档中)占位符,用于将命名空间与文档中的标识符连接的命名空间。您可以轻松更改XPath相关代码中的占位符(例如x
),并将NS
保留在文档中,只要它仍然是命名空间{{1 }}