按多级属性值选择 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 节点值的主要内容,如果未能解决你的问题,请参考以下文章
使用xslt和c#从中选择一个xml节点并根据其值添加更多节点[重复]
使用 XPath,如何根据节点的文本内容和属性值来选择节点?