C#导入XML文件字符错误

C# import XML file character error

我想查询一个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\DataL2Y.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");

当我 运行 脚本时,它 returns 一个 System.XML.XMLException (不能使用字符“:”。但是 XML 文件是如何构建的. 我试图更改 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 等也是如此)。