按多级属性值选择 XML 节点值

Posted

技术标签:

【中文标题】按多级属性值选择 XML 节点值【英文标题】:Select XML node value by attribute value with multiple levels 【发布时间】:2011-10-18 11:50:51 【问题描述】:

我希望在 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,password 将产生 MyPassword2。

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

还有什么建议吗?

【问题讨论】:

你所说的“通过多个级别”是什么意思?并且可以使用 LINQ to XML 吗? (这可能会使代码更简单。) 这个人有不同的问题,但最终是XML遍历。看看他做了什么以及对他的错误的回应:***.com/q/7806604/613130(如果你想使用 LINQ to XML) 不清楚你在问什么。你试过什么?不行怎么办? 欢迎来到 Stack Overflow!如果您想为您的问题添加其他信息,只需编辑您的问题(单击问题下方的“编辑”链接)。要评论您收到的答案,请使用答案下方的评论工具。如果您发现评论空间不足,您可能应该进行编辑。答案应该就是这样,直接回答您的问题。 【参考方案1】:

试试LINQ to XML。

这里有a tutorial。

【讨论】:

谢谢,我会去看看 Linq to xml。如果我解决了它,我会将我的发现发布给未来搜索相同问题的人。

以上是关于按多级属性值选择 XML 节点值的主要内容,如果未能解决你的问题,请参考以下文章

SQL取xml中节点值

使用xslt和c#从中选择​​一个xml节点并根据其值添加更多节点[重复]

使用 XPath,如何根据节点的文本内容和属性值来选择节点?

如何在 XQuery 中选择节点的属性值?

从 xmlDocument 中选择特定的 xml 节点,然后更改 xml 节点的属性

XML 通过属性值 JavaScript 删除节点