【问题标题】:XmlWriter including namespace\schema for each tagXmlWriter 包括每个标签的命名空间\模式
【发布时间】:2017-12-09 08:52:42
【问题描述】:

我需要使用 XmlWriter 在 XML 中创建一个文件,包括为每个标签命名空间\模式。 首先我有一个由 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...

我该怎么做?

【问题讨论】:

  • 如果它适合你,别忘了点赞/接受

标签: c# xml xmlserializer xmlwriter


【解决方案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; }
}

【讨论】:

  • 您创建的附加 xsn 变量的对象是什么?
  • 明天我会试试你的代码,但我还需要添加到根 xml 标记。
  • @ezechiele2517 - 如果你想要额外的根标签,那么你需要把你的类作为消息放在另一个类中......示例公共类根{公共消息消息{get; set;}} 这样就可以了
  • 我在第一篇文章的第二部分添加了代码来解释我需要什么。你能看看吗?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2010-11-03
  • 1970-01-01
相关资源
最近更新 更多