Возможно, мой вопрос может быть более логичным, чем техническим, или, возможно, я не использую лучшую библиотеку для этого случая. Я использую библиотеку xml в c# для создания XML файла. Вот так:
<Content>
<Pid name>
<pid name> NAME </pid name>
<message>
<message name> NAME </message name>
<Pid>
<content name> name </content name>
<content name> name </content name>
<content name> name </content name>
<content name> name </content name>
</Pid>
<Pid>
<content name> name </content name>
<content name> name </content name>
<content name> name </content name>
<content name> name </content name>
</Pid>
<Pid>
<content name> name </content name>
<content name> name </content name>
<content name> name </content name>
<content name> name </content name>
</Pid>
</message>
</pid name>
<Pid name>
<pid name> NAME </pid name>
<message>
<message name> NAME </message name>
<Pid>
<ByteBit> name </ByteBit>
<ByteBitDescription> name </ByteBitDescription>
<QualifierID> name </QualifierID>
<DefaultValue> name </DefaultValue>
<Size> name </Size>
<ConversionType> name </ConversionType>
<ConversionName> name </ConversionName>
<ConversionID> name </ConversionID>
</Pid>
<Pid>
<ByteBit> name </ByteBit>
<ByteBitDescription> name </ByteBitDescription>
<QualifierID> name </QualifierID>
<DefaultValue> name </DefaultValue>
<Size> name </Size>
<ConversionType> name </ConversionType>
<ConversionName> name </ConversionName>
<ConversionID> name </ConversionID>
</Pid>
</message>
</pid name>
<Pid name>
<pid name> NAME </pid name>
<message>
<message name> NAME </message name>
<Pid>
<ByteBit> name </ByteBit>
<ByteBitDescription> name </ByteBitDescription>
<QualifierID> name </QualifierID>
<DefaultValue> name </DefaultValue>
<Size> name </Size>
<ConversionType> name </ConversionType>
<ConversionName> name </ConversionName>
<ConversionID> name </ConversionID>
</Pid>
</message>
</pid name>
</content>
Вот интересная часть: я беру значения из ДОКУМЕНТА EXCEL, для этого я циклически просматривая всю таблицу, чтобы найти указанные c теги. Например, если одна ячейка в [row: n, col: 1] окрашена в синий цвет, значением этой ячейки будет PID NAME TAG Если цвет одной ячейки в [row: n, col : 1] значение этой ячейки будет TAG * ИМЯ СООБЩЕНИЯ Если цвет одной ячейки в [row: n, col: 1], значение этой ячейки будет CONTENT и все следующие значения соответствуют этому тегу, пока условие if не найдет следующую ячейку с атрибутом ** BLUE COLOR **. Вот код.
string ByteBit;
string ByteBitDescription;
string QualifierID;
string DefaultValue;
string Size;
string ConversionType;
string ConversionName;
string ConversionID;
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)
{
Console.WriteLine("PID NAME: " +cell.Text);
row++;
}
//Messages
// if given cell color is gray enters to the conditional
else if (cell.Interior.Color == colorMSG)
{
//This get the value of a message
Console.WriteLine("MESSAGE NAME:" + cell.Text);
row++;
#region add transmitVarLines
//if the given cell doenst have a filled color
while (cell.Interior.Color == 0)
ByteBit = Convert.ToString(worksheet.Cells[row, 1].Value2);
ByteBitDescription = Convert.ToString(worksheet.Cells[row, 2].Value2);
QualifierID = Convert.ToString(worksheet.Cells[row, 3].Value2);
DefaultValue = Convert.ToString(worksheet.Cells[row, 4].Value2);
Size = Convert.ToString(worksheet.Cells[row, 5].Value2);
ConversionType = Convert.ToString(worksheet.Cells[row, 6].Value2);
ConversionName = Convert.ToString(worksheet.Cells[row, 7].Value2);
ConversionID = Convert.ToString(worksheet.Cells[row, 8].Value2);
//print all this values
row++;
}
else
throw new Exception("Unexpected row = " + row + ", color = " + cell.Interior.Color);
}
Я пытался использовать эту логику c в циклах с библиотекой xml, но она не работала
XmlTextWriter xmlWriter = new XmlTextWriter(filename, System.Text.Encoding.UTF8);
xmlWriter.Formatting = Formatting.Indented;
xmlWriter.WriteStartDocument();
xmlWriter.WriteComment("Creating an XML file using c#");
xmlWriter.WriteStartElement("PID");
xmlWriter.WriteStartElement("PID Name ");
xmlWriter.WriteElementString("PID Name", "NAME");
xmlWriter.WriteStartElement("Message");
xmlWriter.WriteElementString("Message Name", "MESSAGE");
xmlWriter.WriteStartElement("PID");
xmlWriter.WriteElementString("ByteBit", "00");
xmlWriter.WriteElementString("ByteBitDescription", "Description");
xmlWriter.WriteElementString("QualifierID", "00D0");
//This ends the STARTELEMENT PID IN THIS LEVEL
xmlWriter.WriteEndElement();
//This ends the START ELEMENT MESSAGE IN THIS LEVEL
xmlWriter.WriteEndElement();
//This ends the start element PID NAME in this level
xmlWriter.WriteEndElement();
//This ends the startElement PID in this level
xmlWriter.WriteEndElement();
xmlWriter.Flush();
xmlWriter.Close();
** Дело в том, что я не может завершить элемент write внутри каждого условия if, потому что он не будет следовать схеме, которую я хочу в xml