Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XML元素和循环_C#_Xml_Linq - Fatal编程技术网

C# XML元素和循环

C# XML元素和循环,c#,xml,linq,C#,Xml,Linq,请帮助我修复导致此xml输出的代码 名为“频率”和“ScheduleType”的元素都被固定在schedule的第一个元素下。我该如何解决这个问题 我从CSV类型的文件中读取数据,然后根据位置和值将相关数据(或转换值)添加到相关的XML值中 您将看到,在可能的情况下,我使用了建议的方法,但由于我必须使用一个额外的CASE语句,所以我陷入了困境,因此我返回到使用最后一个语句来尝试找到正确的元素以继续 <Schedules> <Schedule Number="1"&g

请帮助我修复导致此xml输出的代码

名为“频率”和“ScheduleType”的元素都被固定在schedule的第一个元素下。我该如何解决这个问题

我从CSV类型的文件中读取数据,然后根据位置和值将相关数据(或转换值)添加到相关的XML值中

您将看到,在可能的情况下,我使用了建议的方法,但由于我必须使用一个额外的CASE语句,所以我陷入了困境,因此我返回到使用最后一个语句来尝试找到正确的元素以继续

  <Schedules>
    <Schedule Number="1">
      <ScheduleName>Cumulative</ScheduleName>
      <BackupType>Cinc</BackupType>
      <Multiplexing>4</Multiplexing>
      <RetentionLevel>infinite</RetentionLevel>
      <ResidenceIsSLP>No</ResidenceIsSLP>
      <MultipleCopies>No</MultipleCopies>
      <ScheduleType />
      <Frequency>
        <Count>5</Count>
        <Unit>Days</Unit>
        <Count>2</Count>
        <Unit>Weeks</Unit>
        <Count>1</Count>
        <Unit>Days</Unit>
      </Frequency>
      <ScheduleType />
      <Frequency />
      <ScheduleType />
      <Frequency />
    </Schedule>
    <Schedule Number="2">
      <ScheduleName>Full</ScheduleName>
      <BackupType>Full</BackupType>
      <Multiplexing>4</Multiplexing>
      <RetentionLevel>infinite</RetentionLevel>
      <ResidenceIsSLP>No</ResidenceIsSLP>
      <MultipleCopies>No</MultipleCopies>
    </Schedule>
    <Schedule Number="3">
      <ScheduleName>Differential</ScheduleName>
      <BackupType>Diff</BackupType>
      <Multiplexing>4</Multiplexing>
      <RetentionLevel>2 weeks</RetentionLevel>
      <ResidenceIsSLP>No</ResidenceIsSLP>
      <MultipleCopies>No</MultipleCopies>
    </Schedule>
  </Schedules>

public XDocument PolicyAttributesSection()
{
    XDocument policies = XDocument.Load("C:\\Output Files\\testnbu.xml");

    policies.Element("NBUConfig").Add(new XElement("Policies"));
    using (TextFieldParser policy = new TextFieldParser("C:\\Input Files\\RAM\\bppllist.txt"))
    {
        string[] ignoreLines1 = { "NAMES", "KEY", "RCMD", "BCMD", "FOE", "SHAREGROUP", "APPLICATIONDEFINED", "SCHEDFOE" };
        policy.TextFieldType = FieldType.Delimited;
        policy.Delimiters = new string[] { " ", ",", ";" };
        policy.HasFieldsEnclosedInQuotes = true;
        policy.CommentTokens = ignoreLines1;
        policy.TrimWhiteSpace = true;

        string[] policyprops;
        int schedulenumber;

        while (!policy.EndOfData)
        {

             schedulenumber = 0;
            var pl = policies.Element("NBUConfig").Element("Policies").Elements("Policy");
            policyprops = policy.ReadFields();
            switch (policyprops[0])
            {
            case "SCHED":
                    schedulenumber++;
                    int scheduletypenumber;
                    bool schedparsed = int.TryParse((policyprops[2]), out scheduletypenumber);
                    string scheduletypename = ScheduleType_Lookup[(scheduletypenumber)];
                    int retlevel;
                    bool retparsed = int.TryParse((policyprops[5]), out retlevel);
                    string retentionperiod = (Retention_Lookup[(retlevel)]).ToString();
                    int isslp;
                    bool isslpparsed = int.TryParse((policyprops[17]), out isslp);
                    int copynumber;
                    bool copynumberparsed = int.TryParse((policyprops[12]), out copynumber);
                    if (copynumber > 0)
                    {
                        copynumber = 1;
                    }
                    pl.Last().Element("Schedules").Add(new XElement(("Schedule"), new XAttribute("Number", (schedulenumber)),
                    (new XElement("ScheduleName", policyprops[1])),
                    (new XElement("BackupType", (scheduletypename))),
                    (new XElement("Multiplexing", policyprops[3])),
                    (new XElement("RetentionLevel", (retentionperiod))),
                    (new XElement("ResidenceIsSLP", (yesno_lookup[(isslp)]))),
                    (new XElement("MultipleCopies", (yesno_lookup[(copynumber)])))));
                    pl.Last().Element("Schedules").Element("Schedule").Add(new XElement(("ScheduleType")));
                    switch (policyprops[11])
                    {
                        case "1":
                            pl.Last().Element("Schedules").Element("Schedule").Add(new XElement("Calendar", "Enabled"));
                            pl.Last().Element("Schedules").Element("Schedule").Add
                    (new XElement("CalendarRetries", "Disabled"));
                            break;
                        case "2":
                            pl.Last().Element("Schedules").Element("Schedule").Add
                    (new XElement("Calendar", "Enabled"));
                            pl.Last().Element("Schedules").Element("Schedule").Add
                    (new XElement("CalendarRetries", "Enabled"));
                            break;
                        case "0":
                            int freqseconds;
                            bool startparsed = int.TryParse((policyprops[4]), out freqseconds);
                            var freq = frequency(freqseconds);
                            pl.Last().Element("Schedules").Element("Schedule").Add
                    (new XElement("Frequency"));
                            int count = freq.Item1;
                            string unit = freq.Item2;
                            pl.Last().Element("Schedules").Element("Schedule").Element("Frequency").Add
                    (new XElement("Count", (count).ToString()));
                            pl.Last().Element("Schedules").Element("Schedule").Element("Frequency").Add
                    (new XElement("Unit", (unit)));
                            break;
                    }
                    break;
            }
        }
        policies.Save("C:\\Output Files\\testnbu.xml");
        return policies;

累计的
Cinc
4.
无限的
不
不
5.
天
2.
周
1.
天
满满的
满满的
4.
无限的
不
不
有差别的
差异
4.
2周
不
不
public XDocument PolicyAttributeSection()
{
XDocument policies=XDocument.Load(“C:\\Output Files\\testnbu.xml”);
政策。要素(“NBUConfig”)。添加(新的要素(“政策”);
使用(TextFieldParser策略=新的TextFieldParser(“C:\\Input Files\\RAM\\bppllist.txt”))
{
字符串[]ignoreLines1={“名称”、“键”、“RCMD”、“BCMD”、“FOE”、“共享组”、“应用程序定义”、“SCHEDFOE”};
policy.TextFieldType=FieldType.Delimited;
policy.Delimiters=新字符串[]{“,”,“;”};
policy.HasFieldsEnclosedInQuotes=true;
policy.CommentTokens=ignoreLines1;
policy.TrimWhiteSpace=true;
字符串[]策略道具;
int调度编号;
而(!policy.EndOfData)
{
schedulenumber=0;
var pl=policies.Element(“NBUConfig”).Element(“policies”).Elements(“policity”);
policyprops=policy.ReadFields();
开关(policyprops[0])
{
案例“SCHED”:
schedulenumber++;
int scheduletypenumber;
bool schedparsed=int.TryParse((policyprops[2]),out scheduletypenumber);
字符串scheduletypename=ScheduleType_查找[(scheduletypenumber)];
智力水平;
bool-retparsed=int.TryParse((policyprops[5]),out-retlevel);
字符串retentionperiod=(Retention_Lookup[(retlevel)]).ToString();
int isslp;
bool-isslpparsed=int.TryParse((policyprops[17]),out-isslp);
国际文号;
bool copynumberparsed=int.TryParse((policyprops[12]),out copynumber);
如果(拷贝数>0)
{
copynumber=1;
}
pl.Last().Element(“Schedules”).Add(新的XElement(“Schedule”)、新的XAttribute(“Number”)、(schedulenumber)),
(新XElement(“ScheduleName”,policyprops[1]),
(新XElement(“备份类型”,(scheduletypename)),
(新的XElement(“多路复用”,policyprops[3]),
(新的XElement(“保留级别”,“保留期”),
(新XElement(“ResidenceISLP”),(yesno_查找[(isslp)]),
(新的XElement(“多个复制品)”,(yesno_查找[(copynumber)]))));
pl.Last().Element(“Schedules”).Element(“Schedule”).Add(新的XElement((“ScheduleType”));
切换(policyprops[11])
{
案例“1”:
pl.Last().Element(“日程表”).Element(“日程表”).Add(新的元素(“日历”,“已启用”));
pl.Last().Element(“附表”).Element(“附表”).Add
(新的XElement(“日历重试”、“禁用”);
打破
案例“2”:
pl.Last().Element(“附表”).Element(“附表”).Add
(新的XElement(“日历”、“已启用”);
pl.Last().Element(“附表”).Element(“附表”).Add
(新的XElement(“日历重试”,“已启用”);
打破
案例“0”:
int-freqs;
bool startparsed=int.TryParse((policyprops[4]),输出频率为秒;
var freq=频率(频率秒);
pl.Last().Element(“附表”).Element(“附表”).Add
(新元素(“频率”);
int count=freq.Item1;
字符串单位=freq.Item2;
pl.Last().Element(“附表”).Element(“附表”).Element(“频率”).Add
(新的XElement(“Count”,(Count.ToString());
pl.Last().Element(“附表”).Element(“附表”).Element(“频率”).Add
(新"单位",(单位)),;
打破
}
打破
}
}
保存(“C:\\Output Files\\testnbu.xml”);
退货政策;

这句话就是问题所在:

test.Element("NBUConfig")
    .Element("Policies")
    .Elements("Policy").Last()
    .Elements("Schedules").Last()
    .Element("Schedule")
    .Add(new XElement(("SchedulesStuff"), (scount)));
您正在将
SchedulesStuff
添加到最后一个
Schedules
元素中的第一个
Schedule
元素中,而不是将其添加到唯一
Schedules
元素中的最后一个
Schedule
元素中

<> P>所有这些代码都要简单得多,而且容易出错——如果你的重复代码少得多,那么请考虑:

var policies = new XElement("Policies");
var test = new XDocument(new XElement("NBUConfig", policies));

// Hint: for loops are more idiomatic than while loops here
for (int pcount = 0; pcount < 3; pcount++)
{
    var schedules = new XElement("Schedules");
    for (int scount = 0; scount < 3; scount++)
    {
        schedules.Add(new XElement("Schedule",
            new XAttribute("Number", scount),
            new XElement("ScheduleStuff", scount));
    }

    policies.Add(new XElement("Policy",
        new XElement("PolicyName", pcount),
        new XElement("General"),
        new XElement("Clients"),
        new XElement("IncludeList"),
        schedules));        
}
var policies=new-XElement(“策略”);
var测试=新XDocument(新XElement(“NBUConfig”,政策));
//提示:这里的for循环比while循环更惯用
对于(int-pcount=0;pcount<3;pcount++)
{
var计划=新的XElement(“计划”);
对于(int-scont=0;scont<3;scont++)