0

嗨,任何人都可以帮助我。我有一个包含我自己的命名空间 xmlns:NS 的 XML。我需要选择包含命名空间“NS”的所有节点。我们如何使用 C#.net 做到这一点。

我尝试如下:

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>
4

2 回答 2

1

如果您拥有 .net 框架版本 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");
于 2012-07-02T07:57:32.517 回答
0

您可以将 XPath 表达式与SelectNodes方法一起使用。

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在文档中,只要它仍然是 namespace ,一切仍然有效www.yembi.com

于 2012-07-02T07:49:08.257 回答