2009-08-27 2 views
19

Это может быть вопрос для начинающих xml, но как я могу сгенерировать XML-документ, который выглядит следующим образом?Как написать xml с пространством имен и префиксом с XElement?

<root xmlns:ci="http://somewhere.com" xmlns:ca="http://somewhereelse.com"> 
    <ci:field1>test</ci:field1> 
    <ca:field2>another test</ca:field2> 
</root> 

Если я могу заставить это написать, я могу заставить остальную часть моей проблемы работать.

В идеале я хотел бы использовать LINQ to XML (XElement, XNamespace и т. Д.) С помощью C#, но если это можно будет сделать проще/лучше с XmlDocuments и XmlElements, я бы пошел с этим.

Спасибо !!!

ответ

39

Вот небольшой пример, который создает вывод, который вы хотите:

using System; 
using System.Xml.Linq; 

class Program 
{ 
    static void Main() 
    { 
     XNamespace ci = "http://somewhere.com"; 
     XNamespace ca = "http://somewhereelse.com"; 

     XElement element = new XElement("root", 
      new XAttribute(XNamespace.Xmlns + "ci", ci), 
      new XAttribute(XNamespace.Xmlns + "ca", ca), 
       new XElement(ci + "field1", "test"), 
       new XElement(ca + "field2", "another test")); 
    } 
} 
+0

Вам не нужно двоеточие в там для этого работать? Кроме того, не выдается 'XNamespace.Xmlns'' http: // www.w3.org/2000/xmlns/'? –

+0

@ BrainStorm.exe No. Как первоначально ответили, код работает так, как ожидалось. Когда XNamespace добавляется со строкой, двоеточие автоматически добавляется. Это не то, что нужно выполнить вручную. – techvice

+0

Вот [документация, описывающая оператор сложения для пространства имен XNamespace и строки] (https://msdn.microsoft.com/en-us/library/system.xml.linq.xnamespace.op_addition (v = vs.110). ASPX) – techvice

-1
XNamespace ci = "http://somewhere.com"; 
XNamespace ca = "http://somewhereelse.com"; 
XElement root = new XElement(aw + "root", 
    new XAttribute(XNamespace.Xmlns + "ci", "http://somewhere.com"), 
    new XAttribute(XNamespace.Xmlns + "ca", "http://somewhereelse.com"), 
    new XElement(ci + "field1", "test"), 
    new XElement(ca + "field2", "another test") 
); 
Console.WriteLine(root); 

Th выводится должен

<root xmlns:ci="http://somewhere.com" xmlns:ca="http://somewhereelse.com"> 
    <ci:field1>test</ci:field1> 
    <ca:field2>another test</ca:field2> 
</root> 
-1

Для XmlDocument это похоже:

XmlAttribute attribute1 = sessionXml.CreateAttribute("s", "Attribute1", namespaceURI); 
XmlAttribute attribute2 = sessionXml.CreateAttribute("s", "Attribute2", namespaceURI); 
XmlAttribute attribute3 = sessionXml.CreateAttribute("s", "Attribute3", namespaceURI); 
XmlAttribute attribute4 = sessionXml.CreateAttribute("s", "Attribute4", namespaceURI); 
2

Попробуйте этот код:

string prefix = element.GetPrefixOfNamespace(element.Name.NamespaceName); 
string name = String.Format(prefix == null ? "{1}" : "{0}:{1}", prefix, element.Name.LocalName);` 
Смежные вопросы