使用多个命名空间 .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
被声明你应该能够 运行 通过任何节点并获得你想要的任何值.
这是我的代码
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
被声明你应该能够 运行 通过任何节点并获得你想要的任何值.