我有一个XML文件,可以使用XMLSerializer读取并反序列化为对象“ newProject”。我需要修改对象的某些部分,然后序列化回XML文件。
我基本上可以做到这一点,但是如果一个XML元素下有一个XML元素数组,我将无法弄清楚如何更改值。
例如,我有以下课程:
public partial class addDataData {
private System.Xml.XmlElement anyField;
private string nameField;
private addDataDataHandleUnknown handleUnknownField;
/// <remarks/>
[System.Xml.Serialization.XmlAnyElementAttribute()]
public System.Xml.XmlElement Any {
get {
return this.anyField;
}
set {
this.anyField = value;
}
}
我正在尝试将值写入“ Any”元素下的xml数组元素。
我尝试过:
newProject.addData[i].Any[0] = fbFolderList[0];
我收到错误消息“参数1:无法从int转换为字符串”,因为VS希望您在此处键入XML字符串名称。
我也尝试过:
newProject.addData[i].Any = fbFolderList.ToArray();
fbFolderList包含我修改的XML元素。 这也给了我错误“无法将System.xml.xmlElement []隐式转换为system.xml.xmlElement”。
这是对象结构的屏幕截图。
当我尝试使用foreach循环时,可以访问“ Any”元素下的数组值,但是如您所知,您无法将值写入foreach迭代变量。
private void ReadAddData(addDataData[] data)
{
foreach (addDataData d in data)
{
foreach(XmlElement folder in d.Any)
{
fbFolderList.Add(folder)
}
}
}
是否可以告诉编译器或程序我要访问数组值而不要获取xml元素名称?
谢谢您能给我的任何帮助。
对不起,我是新手,不确定如何将Xml文件附加到此帖子。 Xml很大,但是我在监视窗口中附加了xml的屏幕截图 xml screenshot
这是我的xml文档的简化形式。
<?xml version="1.0" encoding="utf-16"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.plcopen.org/xml/tc6_0201">
<fileHeader companyName="x" companyURL="xx"/>
<instances>
<configurations></configurations>
</instances>
<addData>
<data name="http:/xml/projectPlcType" handleUnknown="implementation">
<projectPlcType name="R08" />
</data>
<data name="http:/xml/projectFolders" handleUnknown="implementation">
<projectFolders>
<folder name="AVM" type="functionBlock" functionBlockType="macro" modificationDateTime="2018-11-08T12:08:01-06:00" />
<folder name="PLCOpenServo" type="functionBlock" functionBlockType="macro" modificationDateTime="2018-11-12T10:09:16-06:00" />
</projectFolders>
</data>
</addData>
</project>