簡単にするために、プロジェクトの複雑さを大幅に軽減し、私が苦労していることの単純で正確な例を示します。2 つの XML ファイルがあり、それらRead.xml
を および と呼びますWrite.xml
。目標は、プロジェクトでRead.xmlの内容を読み取り、XML をクラスに解析してから、それをWrite.xmlに再構築することです。
XML がRead.xmlに生成される方法は、要素に値がない場合は短縮形の終了タグ ( <ElementName />
) を使用し、値がある場合は長い形の終了タグ ( <ElementName>Element Value</ElementName>
) を使用します。Read.xmlでの XML の生成を制御することはできません。
以下のコードは、長い手書きの終了タグを使用している限り、XML の解析に最適です。ただし、 ReportId
以下に省略形の終了タグがある場合、現在のコードは次の行を読み取ります (長い手書きの終了タグの場合、XML 要素の値になります)。ただし、次の行は空白です。値が"\n"の要素。これにより、 Write.xmlの XML に新しい行が追加され 、XML 形式が奇妙になります。Read.xmlから XML を読み取って解析するために使用するコードは次のとおりです。
while(xmlReader.Read())
{
switch(xmlReader.NodeType)
{
case XmlNodeType.Element:
if(xmlReader.Name.Equals("ReportSummary") && xmlReader.IsStartElement())
{
currentReport = new Entities.Report();
}
else if(xmlReader.Name.Equals("ReportName"))
{
xmlReader.Read();
currentReport.ReportName = xmlReader.Value;
}
else if(xmlReader.Name.Equals("ReportId"))
{
xmlReader.Read();
currentReport.ReportId = xmlReader.Value;
}
break;
case XmlNodeType.EndElement: //Reached the end of the element.
if(xmlReader.Name.Equals("ReportSummary"))
{
if(currentReport!= null)
{
reportList.Add(currentReport);
currentReport = null;
}
}
break;
default:
break;
}
}
私の質問は、短縮形の終了タグと長い閉鎖タグを処理する適切な方法があるかどうかです。または、XML ファイルをまとめて解析するより良い方法はありますか?
提供されたすべての前もって感謝します。