这可能是重复的,因为我的问题似乎微不足道,但我无法在stackoverflow.com找到答案。
我有一个 XElement ,其数据如下:
<abc:MyElement>My value</abc:MyElement>
问题: 如何从XElement获取带有前缀的完整名称作为字符串?
预期结果:
abc:MyElement
答案 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);