C#:如何从XElement中获取字符串形式的名称(带前缀)

本文关键字:前缀 字符串 XElement 获取 | 更新日期: 2023-09-27 17:59:41

这可能是重复的,因为我的问题看起来很琐碎,但我在stackoverflow.com上找不到答案。

我有一个XElement,数据如下:

<abc:MyElement>My value</abc:MyElement>

问题:如何从XElement中获得前缀为字符串的完整名称?

预期结果

abc:MyElement

C#:如何从XElement中获取字符串形式的名称(带前缀)

到目前为止,我的解决方案是使用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);