Добавить несколько детей C# XML - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь сгенерировать файл xml с библиотекой c# xml Так что это один из примеров моего ожидаемого вывода XML со следующим c# кодом

<root>
    <PIDName PidName="$A011 - Current EQ Checksum">
        <MessageName MessageName="$22 - Read">
            <content>
                <ByteBit>0 [0]</ByteBit>
                <byteBitDescription>Read Data By Identifier Request</byteBitDescription>
                <QualifierID> </QualifierID>
            </content>
        </messageName>
    </PIDName>
</root>

Это мой c# кусок кода, он перебирает файл Excel в зависимости от цвета ячеек, основы c logi c важны, потому что код более сложный, чем этот.

XmlElement pidname1= doc.CreateElement("PIDname");
XmlElement pidname2 = doc.CreateElement("MessageName");
XmlElement content = doc.CreateElement("Content");
while (row < MAX_ROW)
            {
                Range cell = worksheet.Cells[row++, col];

                //PID
                //This if say that if given cell color is blue enters to the conditional 
                if (cell.Interior.Color == colorPID)
                {
                    pidname1 = doc.CreateElement("PIDName");
                    pidname1.SetAttribute("PidName", cell.Value);
                    //rootnode.AppendChild(pidname1);
                    row++;
                }
                //Messages
                // if given cell color is gray enters to the conditional
                else if (cell.Interior.Color == colorMSG)
                {
                    Message message = new Message(cell.Value2);
                    pidname2.SetAttribute("MessageName", cell.Value);
                    pidname1.AppendChild(pidname2);



                    row++;
                    while (!IsRowEmpty(row))
                    {


                        ByteBit = Convert.ToString(worksheet.Cells[row, 1].Value);
                        ByteBitDescription = Convert.ToString(worksheet.Cells[row, 2].Value);
                        QualifierID = Convert.ToString(worksheet.Cells[row, 3].Value);

                        content = doc.CreateElement("Content");
                        XmlElement bB = doc.CreateElement("ByteBit");
                        XmlElement byteBitDescription = doc.CreateElement("byteBitDescription");
                        XmlElement qualifierID = doc.CreateElement("QualifierID");


                        bB.InnerText = ByteBit;
                        byteBitDescription.InnerText = ByteBitDescription;
                        qualifierID.InnerText = QualifierID;

                        content.AppendChild(bB);
                        content.AppendChild(byteBitDescription);
                        content.AppendChild(qualifierID);


                        pidname2.AppendChild(content);
                        doc.DocumentElement.AppendChild(pidname2);
                        pidname1.AppendChild(content);

                        row++;
                    }

                    doc.DocumentElement.AppendChild(pidname2);
                    doc.DocumentElement.AppendChild(pidname1);


                }

По какой-то причине я получаю следующий вывод, я не понимаю, почему, я думаю, это вероятно, потому что я использую несколько AppendChild один за другим.

<root>
    <MessageName MessageName="$22 - Read"> </messageName>
    <PIDName PidName="$A011 - Current EQ Checksum">
        <content>
            <ByteBit>0 [0]</ByteBit>
            <byteBitDescription>Read Data By Identifier Request</byteBitDescription>
            <QualifierID> </QualifierID>
        </content>
    </PIDName>
</root>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...