C#import XML文件字符错误

时间:2015-08-06 08:33:18

标签: c# xml linq character

我想查询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文件中的字符,但没有成功。

1 个答案:

答案 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等)。