C #: Как получить имя (с префиксом) из XElement в виде строки? - PullRequest
6 голосов
/ 17 июня 2011

Это может быть дубликатом, так как мой вопрос кажется таким тривиальным, но я не смог найти ответ здесь на stackoverflow.com .

У меня есть XElement с такими данными:

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

Вопрос: Как получить полное имя с префиксом в виде строки из XElement?

Ожидаемый результат :

abc:MyElement

Ответы [ 5 ]

8 голосов
/ 21 июня 2011

Мое решение до сих пор состояло в том, чтобы использовать метод GetPrefixOfNamespace, доступный в XElement.

Хотя это не очень красивое решение, оно дает мне то, что я хочу:

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

Более элегантные решения приветствуются:)

3 голосов
/ 17 июня 2011

Правильно. Я не использовал те же предметы, что и вы. с LINQ NameSce вы решение:

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
1 голос
/ 17 июня 2011
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 голосов
/ 16 июня 2013

Это вернет префикс из XElement:

myElement.GetPrefixOfNamespace(node.Name.Namespace);
0 голосов
/ 17 июня 2011

Не работает string.Format("{0}:{1}", XElement.Prefix, XElement.Name)?

...