c#导入XML文件字符错误

本文关键字:字符 错误 文件 XML 导入 | 更新日期: 2023-09-27 18:06:34

我想查询一个pdb文件(XML格式),并将相关信息存储在另一个XML文件中。我看过一些教程,并设法在更简单的文件中完成它。

XML文件如下所示:http://www.rcsb.org/pdb/files/1L2Y.xml

我想在一个简单的条件下存储原子坐标(和一些其他信息),属性值PDBx:auth_atom_id等于"N","CA"或"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文件中的字符,但没有成功。

c#导入XML文件字符错误

您误解了这样一个元素的含义:

<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等)