如何读取xmlnode和内部ChildNodes并从输入类型文本更新?

时间:2012-05-25 05:39:35

标签: c# asp.net xml

我有一个像这样的xml文件......

<AnimationPackage>
<condition>
<name>Some Condition 0</name>
<url>http://www.google.com.pk</url>
<rehab>
  <name>Some rehab 0</name>
  <url>http://www.youtube.com</url>
</rehab>
<rehab>
  <name>Some rehab 1</name>
  <url>http://www.youtube.com</url>
</rehab>
<rehab>
  <name>Some rehab 2</name>
  <url>http://www.youtube.com</url>
</rehab>
</condition>
<condition>
<name>Some Condition 1</name>
<url>http://www.google.com.pk</url>
<rehab>
  <name>Some rehab 0</name>
  <url>http://www.youtube.com</url>
</rehab>
<rehab>
  <name>Some rehab 1</name>
  <url>http://www.youtube.com</url>
</rehab>

如何计算标签名称也像Atfirst <Conditions>然后<rehab>对于那些条件 然后来自<rehab><name>标记的<url>代码中的内部文字。 我试过这个,但是在第一次看到它不起作用之后..任何帮助PLZ。

XmlDocument readDoc = new XmlDocument();
readDoc.Load(MapPath("JkGroups.xml"));
conditions = readDoc.SelectNodes("AnimationPackage/condition").Count;
rehab = readDoc.SelectNodes("AnimationPackage/condition/rehab").Count;
lblApptitle.Text = dt.Rows[0]["packageName"].ToString();
XmlNodeList nodeListName = readDoc.SelectNodes("AnimationPackage/condition/rehab/name");
XmlNodeList nodeListUrl = readDoc.SelectNodes("AnimationPackage/condition/rehab/url");
for (rehabCount = 0; rehabCount < rehab; rehabCount++)
{
    rehabNodeName = nodeListName[0].ChildNodes[rehabCount].InnerText;
    rehabNodeUrl = nodeListUrl[0].ChildNodes[rehabCount].InnerText;
    rehabtr += "<tr><td style='width: 106px;padding-left: 20px;' >Rehab title</td><td>"
                                      + "<input type='text' value='" + rehabNodeName + "' id='txtRehabSupportTitle" + rehabCount + "' runat='server' /></td><td>"
                                      + "<input type='text' value='" + rehabNodeUrl + "' id='txtRehabSupportURL" + rehabCount + "' runat='server' /></td></tr>";
}
string rehabBody = "<table id='tblRehab'>" + rehabtr + "<tr><td></td><td></td><td><p>Type support product buy URL</p></td></tr><tr>"
                            + "<td><td>&nbsp;</td><td>&nbsp;</td></tr></table>";

有些东西代码缺失,但我只想帮助xml ..

3 个答案:

答案 0 :(得分:0)

试试这段代码

        XDocument doc = XDocument.Load("c://test.xml");
        var animationPackage = doc.Descendants("AnimationPackage");
        int count = 0;
        foreach (XElement condition in animationPackage.Descendants("condition"))
        {
            count++;
            String name = condition.Element("name").Value;
        }
        //print count . .

答案 1 :(得分:0)

或者您可以使用更多linq功能并在一个表达式中计数:

XDocument doc = XDocument.Load(@"c:\test.xml");
int rehabCount = doc.Root.Descendants()
.Where(x => x.Name == "rehab").Count(); // 5

 var rehabValues = doc.Root.Descendants("rehab")
 .Elements().Select(tag => tag.Value);

结果:

rehabCount:5

rehabValues:

IEnumerable<String>(10项):

Some rehab 0

http://www.youtube.com

Some rehab 1

http://www.youtube.com

Some rehab 2

http://www.youtube.com

Some rehab 0

http://www.youtube.com

Some rehab 1

http://www.youtube.com

答案 2 :(得分:0)

XDocument xDoc = XDocument.Load(......);
var result = xDoc.Descendants("condition")
                .Select(c => new {
                    Name = c.Element("name").Value,
                    Rehabs = c.Descendants("rehab")
                              .Select(r=>new {
                                    Name = r.Element("name").Value,
                                    Url = r.Element("url").Value
                              })
                              .ToArray()

                })
                .ToArray();

Console.WriteLine("Condition#: " + result.Length);
foreach (var cond in result)
{
    Console.WriteLine("\tCondition[" + cond.Name + "]: " + cond.Rehabs.Length);
    foreach (var rehab in cond.Rehabs)
    {
        Console.WriteLine("\t\t"+ rehab.Name + " , " + rehab.Url);
    }
}
相关问题