我正在尝试使用 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,
};
第一个问题(理论上)已解决。到...
第二个问题是我需要提取一些属性(即疏水性、分子量和分子式),但我感到困惑的是属性种类和属性值存储在两个不同的 XElement 中。如何将属性值限制在我关心的字段中?