我想查询pdb文件(XML格式)并将相关信息存储在另一个xml文件中。 我已经参与了一些教程,并设法用更简单的文件来完成。
XML文件如下所示:http://www.rcsb.org/pdb/files/1L2Y.xml
我想基于简单条件存储原子坐标(以及其他一些信息),属性值PDBx:auth_atom_id等于" N"," CA"或者& #34; C"
XDocument xmlDocument = XDocument.Load (@"...\ProjectC#\Molecule_00\PDBLibary_00\Data\1L2Y.xml");
XDocument result = new XDocument (
new XElement ("Molecule",
new XElement ("Atom",
from s in xmlDocument.Descendants ("PDBx:atom_site")
where s.Attribute ("PDBx:auth_atom_id").Value == "N" // s.Attribute ("PDBx:auth_atom_id").Value == "CA" || s.Attribute ("PDBx:auth_atom_id").Value == "C"
select new XElement ("Atom",
new XElement ("AtMolType", s.Element ("PDBx:auth_atom_id").Value),
new XElement ("CoordX", s.Element ("PDBx:Cartn_x").Value),
new XElement ("CoordY", s.Element ("PDBx:Cartn_y").Value),
new XElement ("CoordZ", s.Element ("PDBx:Cartn_z").Value)))));
result.Save(@"...\PDBLibary_00\Data\_1L2Y.xml");
当我运行脚本时,它返回一个System.XML.XMLException(字符":"无法使用。但它是如何构造XML文件的。 我试图改变XML文件中的字符,但没有成功。
答案 0 :(得分:1)
你误解了一个看起来像这样的元素的含义:
<PDBx:atom_siteCategory>
这是一个在名称空间中具有本地名称atom_siteCategory
的元素,其URI为"http://pdbml.pdb.org/schema/pdbx-v40.xsd"
,如前所述:
xmlns:PDBx="http://pdbml.pdb.org/schema/pdbx-v40.xsd"
LINQ to XML具有出色的命名空间支持,因此您只需使用:
XNamespace pdbx = "http://pdbml.pdb.org/schema/pdbx-v40.xsd";
然后在您的查询中使用:
new XElement("AtMolType", s.Element(pdbx + "auth_atom_id").Value),
new XElement("CoordX", s.Element(pdbx + "Cartn_x").Value),
new XElement("CoordY", s.Element(pdbx + "Cartn_y").Value),
new XElement("CoordZ", s.Element(pdbx + "Cartn_z").Value)))));
(同样适用于Descendants
等)。