0

得到这个文件:

<uniprot xmlns="http://uniprot.org/uniprot" xmlns:xsi="http://www.w3.org/2001/    XMLSchema-instance" xsi:schemaLocation="http://uniprot.org/uniprot http://www.uniprot.org/support/docs/uniprot.xsd">
<entry dataset="Swiss-Prot" created="1986-07-21" modified="2013-10-16" version="88">
<dbReference type="GO" id="GO:0006412">
<property type="term" value="P:translation"/>
<property type="evidence" value="IEA:InterPro"/>
</dbReference>
<dbReference type="HAMAP" id="MF_00294">
<property type="entry name" value="Ribosomal_L33"/>
<property type="match status" value="1"/>
</dbReference>
<dbReference type="InterPro" id="IPR001705">
<property type="entry name" value="Ribosomal_L33"/>
</dbReference>

现在,我正在使用它来获取节点的内部文本,效果很好......但是......

XmlDocument XMLdoc = new XmlDocument();
XMLdoc.Load(Datapath);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(XMLdoc.NameTable); 
nsmgr.AddNamespace("ns", "http://uniprot.org/uniprot");
String NodeName = XMLdoc.SelectSingleNode("//ns:fullName", nsmgr).InnerText;

...我需要获取属性以及类型的内容是否为 GO,如果是,则获取该确切节点的以下数据,即 id 和 value。几个小时以来一直在思考和搜索这个问题,但我只是缺乏获得任何地方的知识。

4

2 回答 2

0

我建议使用Linq to Xml,我发​​现它比 XmlDocument 和 XPath 查询容易得多,但这至少部分是个人喜好。

我不太清楚每个“GO”类型的元素的“值”是什么意思,但这应该能让你大部分时间到达那里。goTypeNodes将包含具有“GO”类型及其 ID 和类型值的那些节点的集合,并且还包含它们下面的属性元素,所以如果“值”是指它们下面的属性元素的值,它是从那里得到它是微不足道的。

XNamespace ns = "http://uniprot.org/uniprot";
XDocument doc = XDocument.Load(@"C:\SO\Foo.xml");

var goTypeNodes = from n in doc.Descendants(ns + "dbReference")
                    select new { Id = n.Attribute("id").Value, Type = n.Attribute("type").Value, Properties = n.Elements()};

顺便说一句,您的示例 XML 缺少 uniprot 和 entry 的结束标记。

于 2013-11-03T02:06:22.183 回答
0

实际上我设法解决了这个问题:

            XmlNodeList Testi = XMLdoc.SelectNodes("//ns:dbReference", nsmgr);
            foreach (XmlNode xn in Testi)
            {
                if (xn.Attributes["type"].Value == "GO") 
                {
                    String Testilator = xn.Attributes["id"].Value;
                    String Testilator2 = xn.FirstChild.Attributes["value"].Value;

                }
            }
于 2013-11-03T16:40:55.033 回答