2012-01-21 2 views
3

Я хочу сделать XML-элемент, как это:Xml с двумя атрибутами в C#

<ElementName Type="FirstAttribute" Name="SecondAttribute">Value</Atrybut> 

Теперь я делаю это таким образом:

XmlNode xmlAtrybutNode = xmlDoc.CreateElement("ElementName "); 

_xmlAttr = xmlDoc.CreateAttribute("Type"); 
_xmlAttr.Value = "FirstAttribute"; 
xmlAtrybutNode.Attributes.Append(_xmlAttr); 

_xmlAttr = xmlDoc.CreateAttribute("Name"); 
_xmlAttr.Value = "SecondAttribute"; 
xmlAtrybutNode.Attributes.Append(_xmlAttr); 


xmlAtrybutNode.InnerText = !string.IsNullOrEmpty(Value) 
    ? SetTextLength(Name, ValueLength) 
    : string.Empty; 

Значение входной переменной в методе. Есть ли возможность сделать это по-другому? Более эффективно? Можно ли использовать xmlWriter? Теперь я использую xmlDocument.

+0

если вы пытаетесь сериализации взглянуть объекты из вашего приложения на 'XmlSerializer': http://msdn.microsoft.com /en-us/library/system.xml.serialization.xmlserializer.aspx – yas4891

+0

Что вы пытаетесь создать, выглядит довольно сломанным XML. –

+0

Почему довольно сломан? Я делаю это в соответствии со спецификацией. У меня есть выборка xml, и я должен создать этот xml. – ogrod87

ответ

4

Как насчет настройки существующего кода:

XmlElement el = xmlDoc.CreateElement("ElementName"); 
el.SetAttribute("Type", "FirstAttribute"); 
el.SetAttribute("Name", "SecondAttribute"); 
el.InnerText = ...; 

Дополнительные мысли:

  • XElement
  • XmlSerializer (из экземпляра класса)
+0

Это работает. Спасибо;) – ogrod87

3

Что об использовании LINQ для XML как в этом article. Это может быть очень элегантно - все это можно сделать на одной линии.

XDocument doc = new XDocument(
     new XDeclaration("1.0", "utf-8", "yes"), 
     new XElement("element", 
      new XAttribute("attribute1", "val1"), 
      new XAttribute("attribute2", "val2"), 
     ) 
); 
4

Если вы используете .NET 3.5 (или более позднюю версию), вы можете использовать LINQ to XML. Убедитесь, что на сборку System.Xml.Linq ссылаются и что у вас есть директива using для своего одноименного пространства имен.

XDocument document = new XDocument(
    new XElement("ElementName", 
     new XAttribute("Type", "FirstAttribute"), 
     new XAttribute("Name", "SecondAttribute"), 
     value)); 

Если впоследствии вы хотите написать XDocument к цели, вы можете использовать его метод Save. Для отладки полезно вызвать его метод ToString, который возвращает его представление XML как string.

Редактировать: Ответ на комментарий:

Если вам необходимо преобразовать XDocument созданный выше в XmlDocument Например, вы можете использовать код, подобный следующему:

XmlDocument xmlDocument = new XmlDocument(); 
using (XmlReader xmlReader = document.CreateReader()) 
    xmlDocument.Load(xmlReader); 
+0

Могу ли я добавить этот документ как appendChild в xmlDocument? – ogrod87

6

Вы можете использовать Linq к XML.

В основном

 XDocument doc = new XDocument(); 
     doc.Add(
      new XElement("ElementName", "Value", 
       new XAttribute("Type", "FirstAttribute"), 
       new XAttribute("Name", "SecondAttribute"))); 

даст этот XML-документ

<ElementName Type="FirstAttribute" Name="SecondAttribute">Value</ElementName> 
Смежные вопросы