1
我需要创建配置程序,其中读/写XML配置。配置的 一部分是以下形式:选择两个系统属性之一
<camera>
<id>1</id>
<name>Camera 1</name>
<address>http://192.168.1.100</address>
<roi>
<rect>
<x>100</x>
<y>200</y>
<width>300</width>
<height>150</height>
</rect>
<rect>
<x>350</x>
<y>400</y>
<width>200</width>
<height>250</height>
</rect>
</roi>
</camera>
但输出我需要与XML格式属性:
<camera id="1" name="Camera 1" address="http://192.168.1.100">
<roi>
<rect x="100" y="200" width="300" height="150 />
<rect x="350" y="400" width="200" height="250 />
</roi>
</camera>
创建为每个主节点的类,但我不知道如何选择反序列化属性是否应该是XmlElement,序列化应该是XmlAttribute。或者,我是否为第一种形式的xml和第二种形式创建了两个单独的类?我是C#和.NET的初学者,所以还有其他方面的建议和意见吗?
C#代码:
[System.Serializable()]
public class CamerasConfigAttrib
{
private int id;
private string name;
private string address;
private Collection<Rectangle> roi;
[XmlAttribute("id", Form = XmlSchemaForm.Unqualified)]
public int Id
{
get { return id; }
set { id = value; }
}
[XmlAttribute("name", Form = XmlSchemaForm.Unqualified)]
public string Name
{
get { return name; }
set { name = value; }
}
[XmlAttribute("address", Form = XmlSchemaForm.Unqualified)]
public string Address
{
get { return address; }
set { address = value; }
}
[XmlArray("roi", Form = XmlSchemaForm.Unqualified)]
[XmlArrayItem("rect", typeof(Rectangle), Form = XmlSchemaForm.Unqualified]
public Collection<Rectangle> Roi
{
get { return roi; }
set
{
foreach (var rect in value)
roi.Add(rect);
}
}
}
,我认为你必须作出两个不同的类,但如果有更好的方式来做到这一点,我感兴趣 – GGO
您应该创建一个XSLT并使用'XslCompiledTransform'来创建新的XML。 – Sefe