C#XML节点使用元素但不使用元素

时间:2014-08-02 20:53:48

标签: c# xml windows-phone windows-phone-8.1

我想在以下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}};
enter image description here 正如你可以看到我调试父节点,即 suras 节点,我可以清楚地看到第一个和最后一个节点。但是,当我试图查询其元素或后代时,我什么都没得到。检查以下屏幕截图; enter image description here 同样,如果我将代码更改为suras而不是Element("sura"),那么它只显示第一个节点检查此内容; enter image description here 所以,我的问题是,为什么我没有得到子节点,即surah?

2 个答案:

答案 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"];
            }

希望这有帮助!