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

C#: How to get the name (with prefix) from XElement as string?

提问人:Chau 提问时间:6/17/2011 最后编辑:Chau 更新时间:6/16/2013 访问量:7924

问:

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

我有一个XElement,其中包含这样的数据:

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

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

预期结果

abc:MyElement
C# XML 命名空间 XELEMENT 前缀

评论


答:

0赞 therealmitchconnors 6/17/2011 #1

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

评论

0赞 Chau 6/20/2011
我没有任何财产。如果我有的话,那将是一个非常好的解决方案:)PrefixXElement
0赞 therealmitchconnors 6/20/2011
您使用的是哪个版本的框架?MSDN 显示它具有该属性。
0赞 Chau 6/21/2011
你能引导我靠近一点吗?我找不到属性/方法。我可以找到该方法,到目前为止,我已经使用该方法为我提供了前缀。Prefixpublic string GetPrefixOfNamespace(XNamespace ns)
0赞 therealmitchconnors 6/22/2011
你是对的。我不知道为什么我以为它在那里......你的解决方案在我看来是最好的,除非你想做一些XPath风格的LINQ查询,但这绝对不是更优雅的。
0赞 Chau 6/22/2011
好吧,你的建议仍然正是我所希望的;)
0赞 Bala R 6/17/2011 #2
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>

评论

0赞 Chau 6/20/2011
我试图把我的问题说得更清楚。我只想要前缀和元素名称 () - 而不是具有命名空间和值的整个元素。abc:MyElement
3赞 Rob 6/18/2011 #3

没错,我没有使用和你一样的对象。使用 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

评论

0赞 Chau 6/20/2011
这看起来不错,如果我使用 .但是由于我使用的是 :)XmlElementXElement
10赞 Chau 6/21/2011 #4

到目前为止,我的解决方案是使用 .GetPrefixOfNamespaceXElement

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

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

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

-1赞 Khalil 6/16/2013 #5

这将从 XElement 返回前缀:

myElement.GetPrefixOfNamespace(node.Name.Namespace);

评论

0赞 Abel 10/27/2019
不,它没有,它返回命名空间的 URI 部分,而不是前缀。