0

こんにちは、xml からアップ ノードを取得したいと考えています。たとえば、ここではxml構造...

<feature name="mod1">
  <user name="user1"></user>
  <user name="user2"></user>
  <user name="user3"></user>
</feature>

アプリケーションにユーザー名があり、ノード機能名属性よりも必要です。

XmlReader reader = XmlReader.Create(new StringReader(xml));

            XElement doc = XElement.Load(reader);

            int counter = 0; 
            foreach (XElement user in doc.Descendants("USER"))
            {
                try
                {
                    row = tb.NewRow();
                    row["ID"] = counter++;
                    row["Name"] = user.Attribute("NAME").Value;
                    row["Host"] = user.Attribute("HOST").Value;
                    row["Used_Licenses"] = user.Attribute("USED_LICENSES").Value;
                    row["Checkout_Time"] = user.Attribute("CHECKOUT_TIME").Value;


                   row["Modul"] = user.Parent.Attribute("NAME").Value; //don't work :(

                    tb.Rows.Add(row); 
                }
                catch (Exception)
                {

                }

            }
4

3 に答える 3

1

次のコードはあなたのために働くはずです。

        string xml = "<feature name=\"mod1\">";
        xml += "<user name=\"user1\"> </user>";
        xml += "<user name=\"user2\"> </user> ";
        xml += "<user name=\"user3\"></user>";
        xml += "</feature>";

        XmlDocument xdoc=new XmlDocument();
        xdoc.LoadXml(xml);

        XDocument mydoc = XDocument.Parse(xdoc.OuterXml);

        var result = mydoc.Elements("feature").Where(parent =>
                          parent.Elements("user").Any(child =>   
                          child.Attribute("name").Value == "user2"));

System.Xml の使用を含めることを忘れないでください。System.Xml.Linq を使用します。

于 2013-06-03T09:24:52.757 に答える
1

属性は大文字と小文字が区別されるようです。

XmlReader reader = XmlReader.Create(\\File Path);

        XElement doc = XElement.Load(reader);

        int counter = 0;
        foreach (XElement user in doc.Descendants("USER"))
        {
            try
            {
                string node = user.Parent.Attribute("NAME").Value; //Working - Returning 'GlobalZoneEU'
            }
            catch (Exception)
            {

            }
        }
于 2013-06-03T08:50:39.093 に答える