我正在尝试根据属性值提取xml块。 这是我的xml看起来像
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<HelperKey>
<HardwareType Module="1234">
<m2MainHelperKey>F1DF15D4D1F5D3</m2MainHelperKey>
<m2LowerHelperKey>ER66T4T4R5T4R</m2LowerHelperKey>
<m2UpperHelperKey>4VXC4V5C54VC5</m2UpperHelperKey>
</HardwareType>
<HardwareType Module="AB45">
<m2MainHelperKey>F1DF15FGFD4D1F5D3</m2MainHelperKey>
<m2LowerHelperKey>ERTRTRR66T4T4R5T4R</m2LowerHelperKey>
<m2UpperHelperKey>4VXC4FDFDFDV5C54VC5</m2UpperHelperKey>
</HardwareType>
</HelperKey>
如何根据模块值选择HardwareType中的所有节点,例如如果用户提供了需要选择的模块1234
<HardwareType Module="1234">
<m2MainHelperKey>F1DF15D4D1F5D3</m2MainHelperKey>
<m2LowerHelperKey>ER66T4T4R5T4R</m2LowerHelperKey>
<m2UpperHelperKey>4VXC4V5C54VC5</m2UpperHelperKey>
</HardwareType>
以下是一些示例代码
private void button1_Click(object sender, EventArgs e) {
string helpKey = HelpKey("1234", "m2LowerHelperKey");
}
string HelpKey(string module, string helperKeyName) {
var xmlLoadfullPath = @"C:\_Codebase\Hardware\test.xml";
var doc = XDocument.Load(xmlLoadfullPath);
var dataid = doc.Descendants("HelperKey").Elements();
//Write code below to select, If user passes "1234" select
//<HardwareType Module="1234">
//<m2MainHelperKey>F1DF15D4D1F5D3</m2MainHelperKey>
//<m2LowerHelperKey>ER66T4T4R5T4R</m2LowerHelperKey>
//<m2UpperHelperKey>4VXC4V5C54VC5</m2UpperHelperKey>
//</HardwareType>
//Write code below to get specfic key value based on user input e.g. helperKeyName = "m2LowerHelperKey"
//return this value -> ER66T4T4R5T4R
var helpKey = "";
return helpKey;
}
答案 0 :(得分:0)
您可以使用linq:
var hardware1234 = doc.Elements("HardwareType").
Where(attribute => attribute.Name.LocalName.Equals("Module")
&& attribute.Value != null && attribute.Value.Equals("1234"));
简而言之,这说:
“给我所有名为Hardware的元素,他们有一个名为Module的属性,其非null值为1234。”
答案 1 :(得分:0)
如果您只想选择模块= 1234的HardwareType元素,可以尝试:
doc.Root.Elements("HardwareType").Where(e => e.Attribute("Module").ToString() == "1234");
答案 2 :(得分:0)
XDocument doc = XDocument.Load(@"xmlfile1.xml");
//get all elements for certain attribute
var q = doc.Descendants("HardwareType").Where(c => (string) c.Attribute("Module") == "1234");
foreach (var x in q.Elements())
Console.WriteLine("Name: {0} value: {1}",x.Name , x.Value);
//get one element by name
var el = q.Elements("m2LowerHelperKey").FirstOrDefault().Value;
Console.WriteLine(el);
结果:
Name: m2MainHelperKey value: F1DF15D4D1F5D3
Name: m2LowerHelperKey value: ER66T4T4R5T4R
Name: m2UpperHelperKey value: 4VXC4V5C54VC5
ER66T4T4R5T4R