按属性值选择多个级别的XML节点值

时间:2011-10-18 11:50:52

标签: c# xml xmlnode xml-attribute xmlnodelist

我希望在XML代码中能够比我看到的示例更进一步,并考虑更多属性。

XML代码是:

<?xml version="1.0"?>
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <database name="Members">
        <table_structure name="Logins">
            <field Field="ID" Type="int(100)" Null="NO" Key="PRI" Extra="auto_increment" Comment="" />
            <field Field="Username" Type="text" Null="YES" Key="" Extra="" Comment="" />
            <field Field="Password" Type="text" Null="YES" Key="" Extra="" Comment="" />
            <key Table="Logins" Non_unique="0" Key_name="PRIMARY" Seq_in_index="1" Column_name="ID" Collation="A" Cardinality="1" Null="" Index_type="BTREE" Comment="" />
            <options Name="Logins" Engine="MyISAM" Version="10" Row_format="Dynamic" Rows="1" Avg_row_length="20" Data_length="40" Max_data_length="281474976710655" Index_length="2048" Data_free="20" Auto_increment="3" Create_time="2011-10-14 19:30:57" Update_time="2011-10-14 19:32:21" Collation="latin1_swedish_ci" Create_options="" Comment="" />
        </table_structure>
        <table_data name="Logins">
            <row>
                <field name="ID">1</field>
                <field name="Username">MyName</field>
                <field name="Password">MyPassowrd</field>
            </row>
            <row>
                <field name="ID">2</field>
                <field name="Username">MyName2</field>
                <field name="Password">MyPassowrd2</field>
            </row>
        </table_data>
    </database>
</mysqldump>

我正在尝试使用1,MyName和Password,然后将它们输入到SQL数据库中。

我遇到的问题是通过多个级别:

<database name="Members">
    <table_data name="Logins">
        <row>
            <field name="ID">

通过所有示例,我发现只有1或2级显示。


这似乎有效,

XElement xe = XElement.Load("C:\\PATH.xml");

int count = xe.Descendants("row").Count();

var items = xe.Descendants("field").Where(n => (string)n.Attribute("name") == "ID").ToList();

var items2 = xe.Descendants("field").Where(n => (string)n.Attribute("name") == "Username").ToList();

var items3 = xe.Descendants("field").Where(n => (string)n.Attribute("name") == "Password").ToList();

             for (int i = 0; i < count; i++)
             {
                 string res = items[i].Value.ToString();
                 string res2 = items2[i].Value.ToString();
                 string res3 = items3[i].Value.ToString();
             }

我有一个ID,但我现在需要其所有其他元素。

即,

if (id = 2)
{
    string name = username.value;
    string password = password.value;
}

其中name将导致myName2,密码将为MyPassword2。

我不想将用户名和密码放在列表中。

再次提出建议吗?

1 个答案:

答案 0 :(得分:0)

尝试使用LINQ to XML

这里有a tutorial