使用多个命名空间 .net C# 解析来自 XML 的值

Parsing values from XML using multiple namespaces .net C#

这是我的代码

 String MyXml = "<av:Button Name="btn_1" Width="80" Height="25" x:Uid="btn_1" av:Canvas.Left="168.1" av:Canvas.Top="95.1" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">My Button Content</av:Button>";

    XmlNamespaceManager mngr = new XmlNamespaceManager(new NameTable());
    mngr.AddNamespace("av", "http://www.w3.org/2001/XMLSchema-instance");

    XmlParserContext parserContext = new XmlParserContext(null, mngr, null, XmlSpace.None);

    XmlTextReader txtReader = new XmlTextReader(MyXml, XmlNodeType.Element, parserContext);

    var doc = XElement.Load(txtReader);

    var name = doc.Attribute("Name").Value;
    var width = doc.Attribute("Width").Value; 
    var Uid   = doc.Attribute("Uid").Value; // Not Working

我无法获得 Uid 可能是因为命名空间不同,av:Canvas.Top.

如何获取这些属性?

-TIA

试试这个

        XNamespace xlink = "http://schemas.microsoft.com/winfx/2006/xaml";
        var name = doc.Attribute("Name").Value;
        var width = doc.Attribute("Width").Value;
        var Uid = doc.Attribute(xlink + "Uid").Value;

将 MyXml 与 xmlns:av="anyNameSpaceName" 连接起来,然后您可以使用

访问它
  String MyXml = "<av:Button Name=\"btn_1\" Width=\"80\" Height=\"25\" x:Uid=\"btn_1\" av:Canvas.Left=\"168.1\" av:Canvas.Top=\"95.1\" xmlns:av=\"anyNameSpaceName\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">My Button Content</av:Button>";
  XNamespace ns = "anyNameSpaceName";
  var Canvat_Top= doc.Attribute(ns + "Canvas.Top").Value;

首先,添加所有 namespaces

    XmlNamespaceManager manager= new XmlNamespaceManager(new NameTable());
    mngr.AddNamespace("av", "http://www.w3.org/2001/XMLSchema-instance");
    mngr.AddNamespace("x", "url_for_x");

现在,如果您想要检查属性和节点而不考虑名称空间,您可以简单地访问每个节点,然后遍历其属性以找出值。

    XmlNode uuidNode = xmldoc.SelectSingleNode("/namespace:node", manager);
    if (uuidNode.Attributes != nul)
      foreach(XmlAttribute oAttribute in uuidNode.Attributes)
        if (oAttribute == "UUID")
          name = oAttribute.Value;

只要你在 SelectSingleNode 中添加你想要访问的路径并且你的 namespaces 被声明你应该能够 运行 通过任何节点并获得你想要的任何值.