Я пытаюсь сгенерировать файл 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>