C#:如何从XElement获取名称(带前缀)作为字符串?

时间:2011-06-17 15:00:11

标签: c# xml namespaces xelement prefix

这可能是重复的,因为我的问题似乎微不足道,但我无法在stackoverflow.com找到答案。

我有一个 XElement ,其数据如下:

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

问题: 如何从XElement获取带有前缀的完整名称作为字符串?

预期结果

abc:MyElement

5 个答案:

答案 0 :(得分:8)

到目前为止,我的解决方案是使用GetPrefixOfNamespace中提供的方法XElement

虽然不是一个漂亮的解决方案,它给了我想要的东西:

XElement xml = new XElement(...);
string nameWithPrefix = xml.GetPrefixOfNamespace(xml.Name.Namespace) + 
                        ":" + 
                        xml.Name.LocalName;

非常欢迎更优雅的解决方案:)

答案 1 :(得分:3)

正确我没有使用与你相同的物体。使用LINQ命名空间,您的解决方案是:

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

答案 2 :(得分:1)

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>

答案 3 :(得分:0)

string.Format("{0}:{1}", XElement.Prefix, XElement.Name)不起作用吗?

答案 4 :(得分:0)

这将从XElement返回前缀:

myElement.GetPrefixOfNamespace(node.Name.Namespace);