2011-06-17 15 views

Respuesta

0

¿Se string.Format("{0}:{1}", XElement.Prefix, XElement.Name) no funciona?

+0

I no tiene ninguna propiedad 'Prefijo' en' XElement'. Sería una solución muy buena si lo hubiera pensado :) – Chau

+0

¿Qué versión del framework estás usando? [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) muestra que tiene esa propiedad. – therealmitchconnors

+0

¿Puedes dirigirme más cerca? No puedo encontrar la propiedad/método 'Prefijo'. Puedo encontrar el método 'public string GetPrefixOfNamespace (XNamespace ns)' y hasta ahora lo he usado para darme el prefijo. – 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); 

impresiones

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

He tratado de aclarar mi pregunta. Solo quiero el prefijo y el nombre del elemento ('abc: MyElement') - no el elemento completo con espacios de nombres y valor. – Chau

2

correcta no estaba usando los mismos objetos que usted. con LINQ namesapce que la solución es:

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

impresiones

abc:MyElement 
+0

Eso se ve bien, si estaba usando un 'XmlElement'. Pero dado que estoy usando un 'XElement' no funciona :) – Chau

+1

@Chau ¿es aceptable esta solución? – Rob

8

Mi solución hasta el momento ha sido la de utilizar el método GetPrefixOfNamespace disponible en el XElement.

Aunque no es una solución bastante, me da lo que quiero:

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

soluciones más elegantes son muy bienvenidos :)

0

Esto devolverá el prefijo de XElement:

myElement.GetPrefixOfNamespace(node.Name.Namespace); 
Cuestiones relacionadas