2014-09-25 5 views
-1

Мне нужно сгенерировать определенные данные XML из кода. XML, должен выглядеть следующим образомГенерировать XML из кода C#

<this:declarationIdentifier xmlns:this="demo.org.uk/demo/DeclarationGbIdentifier" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="demo.org.uk/demo/DeclarationGbIdentifier DeclarationGbIdentifier.xsd" 
xmlns:nsIdentity="demo.org.uk/demo/DeclarationGbIdentityType"> 
<this:declarationIdentity> 
<nsIdentity:declarationUcr>Hello World</nsIdentity:declarationUcr> 
</this:declarationIdentity> 
</this:declarationIdentifier> 

я баловался с XmlSerializer и XDocument, но не могу получить выход, чтобы соответствовать этим точно

Пожалуйста, помогите.

+0

Что именно вы пробовали? Можете ли вы поделиться каким-то кодом своих усилий и указать, что именно идет не так? –

ответ

1

Я считаю, что это даст вам желаемый результат. Возможно, это проще, так как это просто от манжеты, чтобы вы начали. С префиксами, которые вам требуются, я бы поискал XmlDocument и добавлял им пространства имен, чтобы лучше понять, что делает код ниже. Также я бы попытался получить файл схемы XSD и использовать XSD.exe для сборки файла .cs, а затем вы можете двигаться вперед с помощью XmlSerializer. Если вы продвигаетесь вперед с приведенным ниже кодом, я настоятельно рекомендую переместить ваш namespaceuri в некоторый мягкий файл настроек, чтобы вы могли легко изменить их в случае их изменения.

 XmlDocument doc = new XmlDocument(); 

     XmlElement root = doc.CreateElement("this", "declarationIdentifier", "demo.org.uk/demo/DeclarationGbIdentifier"); 
     root.SetAttribute("xmlns:this", "demo.org.uk/demo/DeclarationGbIdentifier"); 
     root.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); 

     //Just setting an Attribute of xsi:schemaLocation it would always drop the xsi prefix in the xml so this is different to accomodate that 
     XmlAttribute schemaAtt = doc.CreateAttribute("xsi", "schemaLocation", "http://www.w3.org/2001/XMLSchema-instance"); 
     schemaAtt.Value = "demo.org.uk/demo/DeclarationGbIdentifier DeclarationGbIdentifier.xsd"; 
     root.Attributes.Append(schemaAtt); 

     root.SetAttribute("xmlns:nsIdentity", "demo.org.uk/demo/DeclarationGbIdentityType"); 
     doc.AppendChild(root); 

     XmlElement declarationIdentity = doc.CreateElement("this", "declarationIdentity", "demo.org.uk/demo/DeclarationGbIdentifier"); 

     XmlElement declarationUcr = doc.CreateElement("nsIdentity","declarationUcr","demo.org.uk/demo/DeclarationGbIdentityType"); 
     declarationUcr.InnerText = "Hello World"; 
     declarationIdentity.AppendChild(declarationUcr); 

     doc.DocumentElement.AppendChild(declarationIdentity); 

Для вывода этого в виде строки или сбросить его в файл, вы можете использовать следующие операции, вывод I в файл, а также вывод на консоль в моем тестовом приложении.

 using (var stringWriter = new StringWriter()) 
     using (StreamWriter writer = new StreamWriter(@"C:\<Path to File>\testing.xml")) 
     using (var xmlTextWriter = XmlWriter.Create(stringWriter)) 
     { 
      doc.WriteTo(xmlTextWriter); 
      xmlTextWriter.Flush(); 
      writer.Write(stringWriter.GetStringBuilder().ToString()); 
      Console.WriteLine(stringWriter.GetStringBuilder().ToString()); 
     } 
Смежные вопросы