我需要使用XmlWriter在XML中创建一个文件,包括每个标记名称空间\ schema。 首先我有一个由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:
起始标记吗?
我还需要在我的root标签中添加一些命名空间:
<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">
所以我需要添加到root类:
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...
我该怎么做?
答案 0 :(得分:0)
您可以通过执行以下操作来附加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();
装饰calss如下
[XmlRoot(ElementName = "Message", Namespace = "//namespaceforxml")]
public class Message
{
[XmlElement(ElementName = "val1")]
public string val1{ get; set; }
}