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
等也是如此)。
我想查询一个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
等也是如此)。