xml形式で保存されたエントリの多く(多くのファイル、200GBを超えるデータ)を抽出するために、C#でXMLパーサーを作成しています。私はLinqtoXMLを使用してファイルを解析し、それらのために作成したオブジェクトにすべての情報を取得しています(14個のオブジェクト。一部のオブジェクトにはオブジェクトのリストを含むオブジェクトのリストが含まれています-大量のデータです)。
私が遭遇している問題は、一部のエントリに特定のオブジェクトのインスタンスが0個以上ある可能性があることです。データベースのコンテキストでは、これは問題ありませんが、タグの下に適切なオブジェクトが見つからない場合は、代わりに空/デフォルトのオブジェクトを作成する必要があることをプログラムに伝える方法がわかりません。プログラムを実行すると、「シーケンスに要素が含まれていません」というエラーが表示され、プログラムは空のリストを無視するのではなく、クエリを終了するだけなので、例外処理は機能しません。
linq-to-xmlクエリで0個以上のケースを処理するにはどうすればよいですか?
問題のオブジェクトの定義は次のとおりです。
<!ELEMENT prior-registration-applications (other-related-in* , prior-registration-application*)>
<!ELEMENT other-related-in (#PCDATA)>
<!ELEMENT prior-registration-application (relationship-type? , number?)>
私が問題を抱えているコードはこれです:
priorRegistrationApplications = (
from q in e.Elements("prior-registration-applications")
select new PriorRegistrationApplications(
(string)q.Element("other-related-in"),
(from w in q.Elements("prior-registration-application")
select new PriorRegistrationApplication(
(string)w.Element("relationship-type"),
convertToInt((string)w.Element("number")))
).ToList()
)
).First(), //end prior-applications
PriorRegistrationApplicationsのオブジェクト定義は次のとおりです。
class PriorRegistrationApplications
{
public string other_related_in; //only one appears, regardless of number of applications it seems.
List<PriorRegistrationApplication> priorRegistrationApplications;
public PriorRegistrationApplications(string other_related_in, List<PriorRegistrationApplication> priorRegistrationApplications)
{
this.other_related_in = other_related_in;
this.priorRegistrationApplications = priorRegistrationApplications;
}
およびPriorRegistrationApplicationの場合:
class PriorRegistrationApplication
{
public PriorRegistrationApplication() {
relationship_type = "";
number = 0;
}
public PriorRegistrationApplication(string relationship_type, int number)
{
this.relationship_type = relationship_type;
this.number = number;
}