如何访问XML元素下的XML元素数组?

时间:2018-12-14 14:32:19

标签: c# xml

我有一个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”。

VS wants me to insert a XmlNode name in the [] to get the xml element instead of referencing the array element number...

这是对象结构的屏幕截图。

当我尝试使用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>

0 个答案:

没有答案