我想在以下xml数据中获取suras的子节点;
<suras alias="chapters">
<sura index="1" ayas="7" start="0" name="الفاتحة" tname="Al-Faatiha" ename="The Opening" type="Meccan" order="5" rukus="1" />
<sura index="2" ayas="286" start="7" name="البقرة" tname="Al-Baqara" ename="The Cow" type="Medinan" order="87" rukus="40" />
<sura index="3" ayas="200" start="293" name="آل عمران" tname="Aal-i-Imraan" ename="The Family of Imraan" type="Medinan" order="89" rukus="20" />
<sura index="4" ayas="176" start="493" name="النساء" tname="An-Nisaa" ename="The Women" type="Medinan" order="92" rukus="24" />
<sura index="5" ayas="120" start="669" name="المائدة" tname="Al-Maaida" ename="The Table" type="Medinan" order="112" rukus="16" />
</suras>
suras节点正常,但是当我尝试访问sura
节点时,我无法将其作为Elements
的{{1}};
正如你可以看到我调试父节点,即 suras 节点,我可以清楚地看到第一个和最后一个节点。但是,当我试图查询其元素或后代时,我什么都没得到。检查以下屏幕截图;
同样,如果我将代码更改为
suras
而不是Element("sura")
,那么它只显示第一个节点检查此内容;
所以,我的问题是,为什么我没有得到子节点,即surah?
答案 0 :(得分:2)
它确实有效,你只是不能这样看。尝试迭代Elements("suras")
,你就可以得到结果:
....
var test2 = test.Elements("sura");
foreach (XElement sura in test2)
{
MessageBox.Show(sura.ToString())
//or print to VS output window :
//Debug.WriteLine(sura.ToString());
}
或者通过调用.ToList()
或.ToArray()
来实现查询以便能够在不循环的情况下查看实际结果:
var test2 = test.Elements("sura").ToList();
答案 1 :(得分:1)
这是因为你没有遍历子节点。
请参阅以下代码:
var myDoc = new XmlDocument();
myDoc.Load(Server.MapPath("~/XMLFile1.xml"));
// Get All Suras Elements
var AllSuras = myDoc.GetElementsByTagName("suras");
// For now Select the First item in the All Suras
var Sura = AllSuras[0].ChildNodes;
foreach (XmlNode surah in Sura)
{
var index = surah.Attributes["index"];
var ayas = surah.Attributes["ayas"];
var start = surah.Attributes["start"];
var name = surah.Attributes["name"];
var tname = surah.Attributes["tname"];
var ename = surah.Attributes["ename"];
var type = surah.Attributes["type"];
var order = surah.Attributes["order"];
var rukus = surah.Attributes["rukus"];
}
希望这有帮助!