2011-06-17 11 views

Odpowiedz

0

Czy string.Format("{0}:{1}", XElement.Prefix, XElement.Name) nie działa?

+0

I nie ma żadnej właściwości 'Prefix' na 'XElement'. Byłoby to bardzo miłe rozwiązanie, gdybym miał :) – Chau

+0

Którą wersję platformy używasz? [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) pokazuje, że ma tę właściwość. – therealmitchconnors

+0

Czy możesz mnie skierować bliżej? Nie mogę znaleźć właściwości/metody 'Prefix'. Mogę znaleźć metodę 'public string GetPrefixOfNamespace (XNamespace ns)' i do tej pory użyłem tego, aby dać mi prefiks. – 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); 

drukuje

<abc:MyElement xmlns:abc="http://foo.com">MyValue</abc:MyElement> 
+0

Próbowałem wyjaśnić moje pytanie. Po prostu chcę prefiks i nazwę elementu ('abc: MyElement') - nie cały element z przestrzeniami nazw i wartością. – Chau

2

Prawidłowe ja nie używałem tych samych przedmiotów, jak ty. z LINQ namesapce Ci rozwiązanie jest:

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); 

drukuje

abc:MyElement 
+0

To wygląda dobrze, jeśli użyłem 'XmlElement'. Ale ponieważ używam 'XElement', to nie działa :) – Chau

+1

@Chau jest to rozwiązanie do przyjęcia? – Rob

8

Moje rozwiązanie dotąd użyć metody GetPrefixOfNamespace dostępne w XElement.

Choć nie całkiem rozwiązanie, daje mi to, czego chcą:

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

bardziej eleganckie rozwiązania są bardzo mile widziane :)

0

ten powróci prefiks z Xelement:

myElement.GetPrefixOfNamespace(node.Name.Namespace);