C#:如何从XElement中获取字符串形式的名称(带前缀)
本文关键字:前缀 字符串 XElement 获取 | 更新日期: 2023-09-27 17:59:41
这可能是重复的,因为我的问题看起来很琐碎,但我在stackoverflow.com上找不到答案。
我有一个XElement,数据如下:
<abc:MyElement>My value</abc:MyElement>
问题:如何从XElement中获得前缀为字符串的完整名称?
预期结果:
abc:MyElement
到目前为止,我的解决方案是使用XElement
中可用的方法GetPrefixOfNamespace
。
虽然不是一个很好的解决方案,但它给了我想要的:
XElement xml = new XElement(...);
string nameWithPrefix = xml.GetPrefixOfNamespace(xml.Name.Namespace) +
":" +
xml.Name.LocalName;
非常欢迎更优雅的解决方案:)
正确我没有使用与您相同的对象。使用LINQ namesapce,解决方案是:
using System.Xml.XPath; // <-- Add this namespace.
XNamespace ci = "http://foo.com";
XElement root = new XElement(ci + "Root", new XAttribute(XNamespace.Xmlns + "abc", "http://foo.com"));
XElement childElement = new XElement(ci + "MyElement", "content");
root.Add(childElement);
var str = childElement.XPathEvaluate("name()"); // <-- Tell Xpath to do the work for you :).
Console.WriteLine(str);
打印
abc:MyElement
string.Format("{0}:{1}", XElement.Prefix, XElement.Name)
不工作吗?
XNamespace ci = "http://foo.com";
XElement myElement = new XElement(ci + "MyElement", "MyValue");
XElement rootElement = new XElement("root",
new XAttribute(XNamespace.Xmlns + "abc", ci), myElement);
var str = myElement.ToString();
Console.WriteLine(str);
打印
<abc:MyElement xmlns:abc="http://foo.com">MyValue</abc:MyElement>
这将从XElement:返回前缀
myElement.GetPrefixOfNamespace(node.Name.Namespace);