2011-06-17 74 views

回答

0

是否string.Format("{0}:{1}", XElement.Prefix, XElement.Name)不行?

+0

我'XElement'上沒有任何屬性'Prefix'。這將是一個非常好的解決方案,如果我雖然:) – Chau

+0

你使用哪個版本的框架? [MSDN](http://www.google.com/url?sa=t&source=web&cd=1&sqi=2&ved=0CBoQFjAA&url=http%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fsystem.xml。 linq.xelement.aspx&ei = UVz_TZrfIKTViAKB5oiOBQ&usg = AFQjCNEv3mDy6Q_VL7I6P_fn3f4CEnAqhg&sig2 = O1rNLKqaMVCmNxFJyYlu4g)顯示它具有該屬性。 – therealmitchconnors

+0

你能指引我嗎?我找不到屬性/方法'前綴'。我可以找到'公共字符串GetPrefixOfNamespace(XNamespace ns)'方法,到目前爲止我已經使用那個給我的前綴。 – Chau

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> 
+0

我試圖讓我的問題更清楚。我只想要前綴和元素名稱('abc:MyElement') - 不是具有名稱空間和值的整個元素。 – Chau

2

我沒有使用相同的對象,你是正確的。與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

這看起來不錯,如果我使用'XmlElement'。但是因爲我使用'XElement',所以不起作用:) – Chau

+1

@Chau是否可以接受此解決方案? – Rob

8

我的解決方案迄今已使用在XElement可用的方法GetPrefixOfNamespace

雖然不是一個漂亮的解決方案,它給了我什麼,我想:

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

更優雅的解決方案是非常歡迎的。

0

這將返回的XElement前綴:

myElement.GetPrefixOfNamespace(node.Name.Namespace); 
相關問題