2015-06-26 5 views
0

Я хочу создать следующий XML.C# с XDocument и xsi: schemaLocation

<?xml version="1.0" encoding="utf-8"?> 
<MyNode xsi:schemaLocation="https://MyScheme.com/v1-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://MyScheme.com/v1-0 Sscheme.xsd"> 
    <MyInfo> 
    <MyNumber>string1</MyNumber> 
    <MyName>string2</MyName> 
    <MyAddress>string3</MyAddress> 
    </MyInfo> 
    <MyInfo2> 
    <FirstName>string4</FirstName> 
    </MyInfo2> 
</MyNode> 

Я пользуюсь этим кодом.

XNamespace xmlns = "https://MyScheme.com/v1-0 Sscheme.xsd"; 
    XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance"); 
    XNamespace schemaLocation = XNamespace.Get("https://MyScheme.com/v1-0"); 

    XDocument xmlDocument = new XDocument(
     new XElement(xmlns + "MyNode", 
      new XAttribute(xsi + "schemaLocation", schemaLocation), 
      new XAttribute(XNamespace.Xmlns + "xsi", xsi), 
      new XElement("MyInfo", 
       new XElement("MyNumber", "string1"), 
       new XElement("MyName", "string2"), 
       new XElement("MyAddress", "string3") 
       ), 
       new XElement("MyInfo2", 
        new XElement("FirstName", "string4") 
        ) 
     ) 
    ); 
    xmlDocument.Save("C:\\MyXml.xml"); 

Однако, я получаю xmlns = "" внутри тегов MyInfo и MyInfo2.

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

ответ

1

Для всех элементов необходимо использовать xmlnsXNamespace, поскольку это пространство имен по умолчанию и объявлено в элементе root level. Обратите внимание, что элементы-потомки наследуют предок пространство имен по умолчанию неявно, если не указано иное:

XDocument xmlDocument = new XDocument(
     new XElement(xmlns + "MyNode", 
      new XAttribute(xsi + "schemaLocation", schemaLocation), 
      new XAttribute(XNamespace.Xmlns + "xsi", xsi), 
      new XElement(xmlns+"MyInfo", 
       new XElement(xmlns+"MyNumber", "string1"), 
       new XElement(xmlns+"MyName", "string2"), 
       new XElement(xmlns+"MyAddress", "string3") 
       ), 
       new XElement(xmlns+"MyInfo2", 
        new XElement(xmlns+"FirstName", "string4") 
        ) 
     ) 
    ); 

Dotnetfiddle Demo

+0

Полезный ответ, спасибо – user2273044

+0

Если этот ответ решить вашу проблему, пожалуйста, рассмотреть, чтобы принять его в качестве ответа: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – har07

Смежные вопросы