C#:如何从 XElement 中获取名称(带前缀)作为字符串?
Posted
技术标签:
【中文标题】C#:如何从 XElement 中获取名称(带前缀)作为字符串?【英文标题】:C#: How to get the name (with prefix) from XElement as string? 【发布时间】:2011-09-17 06:43:30 【问题描述】:这可能是重复的,因为我的问题似乎很琐碎,但我无法在 ***.com 上找到答案。
我有一个 XElement,其数据如下:
<abc:MyElement>My value</abc:MyElement>
问题: 如何从 XElement 中获取带有前缀的完整名称作为字符串?
预期结果:
abc:MyElement
【问题讨论】:
【参考方案1】:到目前为止,我的解决方案是使用XElement
中提供的方法GetPrefixOfNamespace
。
虽然不是一个很好的解决方案,但它给了我想要的:
XElement xml = new XElement(...);
string nameWithPrefix = xml.GetPrefixOfNamespace(xml.Name.Namespace) +
":" +
xml.Name.LocalName;
非常欢迎更优雅的解决方案:)
【讨论】:
【参考方案2】:正确,我没有使用与您相同的对象。使用 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
【讨论】:
看起来不错,如果我使用的是XmlElement
。但是由于我使用的是XElement
,所以它不起作用:)【参考方案3】:
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>
【讨论】:
我试图让我的问题更清楚。我只想要前缀和元素名称 (abc:MyElement
) - 而不是带有命名空间和值的整个元素。【参考方案4】:
string.Format("0:1", XElement.Prefix, XElement.Name)
不工作吗?
【讨论】:
我在XElement
上没有任何属性Prefix
。如果我有的话,那将是一个非常好的解决方案:)
您使用的是哪个版本的框架? MSDN 表明它具有该属性。
你能告诉我更近一点吗?我找不到属性/方法Prefix
。我可以找到public string GetPrefixOfNamespace(XNamespace ns)
的方法,到目前为止我已经使用那个方法给我前缀。
你是对的。我不知道为什么我认为它在那里......你的解决方案对我来说似乎是最好的,除非你想做一些 XPath 风格的 LINQ 查询,但这绝对不是更优雅。
嗯,你的建议仍然是我所希望的;)【参考方案5】:
这将从 XElement 返回前缀:
myElement.GetPrefixOfNamespace(node.Name.Namespace);
【讨论】:
不,它没有,它返回命名空间的 URI 部分,而不是前缀。以上是关于C#:如何从 XElement 中获取名称(带前缀)作为字符串?的主要内容,如果未能解决你的问题,请参考以下文章
c# foreach 没有在循环中获取下一个 XElement 名称