XmlWriter, включая пространство имен\схему для каждого тега

Мне нужно создать файл в формате XML с помощью XmlWriter, включая для каждого тега пространство имен\схему. Сначала у меня есть класс, созданный файлом схемы xsd, я создаю класс со всеми объектами и, наконец, сериализую класс, записывая xml:

myclass root = new myclass();
root.val1 = "temp1";
root.val2 = "temp2";

[...]

using (XmlWriter writer = XmlWriter.Create(Path.Combine("myfile.xml"), s))
{
    serializer.Serialize(writer, root);

проблема в том, что он создает такие теги:

<Message>
    <val1> temp1 </val1>
    <val2> temp2 </val2>
<Message>

Я хочу написать теги как:

<temp:Message>
    <temp:val1> temp1 </val1>
    <temp:val2> temp2 </val2>
<temp:Message>

могу ли я использовать какой-либо атрибут в своем классе для добавления temp: начальных тегов?

Мне также нужно добавить к моему корневому тегу некоторое пространство имен:

<temp:Message
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="myxml.xsd"
    xmlns:stf="urn:oecd:ties:stf:v4"
    xmlns:mesage="urn:oecd:ties:cbc:v1"
    xmlns:iso="urn:oecd:ties:isocbctypes:v1"
    version="1.0"> 

поэтому мне нужно добавить в корневой класс:

1) xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2) xsi:schemaLocation="myxml.xsd"
3) xmlns:mesage="urn:oecd:ties:cbc:v1"
4) etc...

Как мне это сделать?


person ezechiele2517    schedule 09.12.2017    source источник
comment
не забудьте проголосовать/принять, если это работает для вас   -  person Pranay Rana    schedule 09.12.2017


Ответы (1)


вы можете прикрепить temp, выполнив следующие действия: прикрепите пространство имен с помощью xml

var xsn = new XmlSerializerNamespaces();
xsn.Add("temp", "http://namespaceforxml");
XmlSerializer s = new XmlSerializer(typeof(Message));
Message msg = new Message(); 
// Writing a file requires a TextWriter.
TextWriter t = new StreamWriter(filename);
s.Serialize(t,msg,ns);
t.Close();

украсить калсс, как показано ниже

[XmlRoot(ElementName = "Message", Namespace = "//namespaceforxml")]
public class Message
{
    [XmlElement(ElementName = "val1")]
    public string val1{ get; set; }
}
person Pranay Rana    schedule 09.12.2017
comment
и какой объект для прикрепления переменной xsn вы создали? - person ezechiele2517; 09.12.2017
comment
завтра я попробую на работе ваш код, но мне нужно также добавить в корневой тег xml. - person ezechiele2517; 10.12.2017
comment
@ezechiele2517 ezechiele2517 - если вам нужен дополнительный корневой тег, вам нужно поместить свой класс, который является Message, в другой класс ... пример Public class Root { public Message message {get; set;}} это будет делать - person Pranay Rana; 11.12.2017
comment
Я добавил во второй части своего первого сообщения код, чтобы объяснить, что мне нужно. Можешь посмотреть? Спасибо - person ezechiele2517; 11.12.2017