LINQを使用して複雑なXMLファイルを解析しようとしています。ファイルには数千のレコードが含まれ、それぞれに数百のフィールドがあります。各薬に関する情報の特定の部分を解析してデータベースに保存する必要があります。
編集: 申し訳ありませんが、最初に投稿されたXMLは実際には正確ではありませんでした。属性がプロセスを変更するという事実に気づいていませんでした。XMLファイルの本質を正確に表現するために質問を更新しました。
XMLのサンプルは次のとおりです。
<<drugs xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://drugbank.ca" xs:schemaLocation="http://www.drugbank.ca/docs/drugbank.xsd" schemaVersion="1.4">
<drug>
<name>foo</name>
<indication>Some info here</indication>
<half-life>1 to 3 hours</half-life>
<protein-binding>90%</protein-binding>
// hundreds of other elements
<properties>
<property>
<kind>logP/hydrophobicity</kind>
<value>-0.777</value>
</property>
<property>
<kind>Molecular Weight</kind>
<value>6963.4250</value>
</property>
<property>
<kind>Molecular Formula</kind>
<value>C287H440N80O110S6</value>
</property>
//dozens of other properties
</properties>
</drug>
// thousands of more drugs
</drugs>
LINQを使用するのはこれが初めてなので、実際のクエリについてはかなりあいまいです。私はSQLに精通しているので、複雑なクエリの概念は私にとって難しいことではありませんが、この問題に役立つと理解できるドキュメントを見つけることができませんでした。私がこれまでに持っているクエリは次のとおりです。
XDocument xdoc = XDocument.Load(@"drugbank.xml");
var d = from drugs in xdoc.Descendants("drug")
select new
{
name = drugs.Element("name").Value,
indication = drugs.Element("indication").Value,
halflife = drugs.Element("half-life").Value,
proteinBinding = drugs.Element("protein-binding").Value,
};
最初の問題は(理論的には)解決されています。に...
2番目の問題は、いくつかのプロパティ(つまり、疎水性、分子量、分子式)を抽出する必要があるという事実ですが、混乱しているのは、プロパティの種類とプロパティ値が2つの異なるXElementに格納されていることです。関心のあるフィールドにプロパティ値を制限するにはどうすればよいですか?