我有一个复杂的结构xml,我需要从中读取一些元素值。 我的xml有点像这样:
<plist version="1.0">
<dict>
<key>XYZ</key>
<dict>
<key>KEYVALUE1</key>
<dict>
<key>A</key>
<date>AVALUE1</date>
<key>B</key>
<string>BVALUE1</string>
</dict>
<key>KEYVALUE2</key>
<dict>
<key>A</key>
<date>AVALUE2</date>
<key>B</key>
<string>BVALUE2</string>
<key>C</key>
<string>CVALUE2</string>
</dict>
</dict>
</dict>
</plist>
我需要的是:使用KEYVALUE2搜索一个字典,无论我在哪里,从中选择BVALUE2(你可以用任何数字替换2,为简洁我只包含2个节点)。
我是xml编程的新手,我试用MS文档的所有尝试都让我更加困惑。有时我发现一个xmlreader示例并不能完全满足我的目的,有时候我得到了LINQ示例,因为它的结构使我感到困惑。请帮忙!
答案 0 :(得分:3)
有许多技术允许您访问XML。
由于linq不是您的口味,您可以执行以下操作:
将XmlDocument与XPath一起使用,例如在本例中:
XmlDocument xmldoc = new XmlDocument();
xmlDoc.LoadXml(xml);
string bvalue = xmlDoc.SelectSingleNode("//dict[key='" + key + "']/dict/string).InnerText;
但我建议先改变XML的结构。
XML是一种很棒的关系数据结构。你的钥匙安排的方式不是关系..在我看来,每个级别应该有一个键如下:
<dict>
<KeyValuePair>
<key type="date">A</key>
<value>AVALUE2</value>
</KeyValuePair>
<KeyValuePair>
<key type="string">B</key>
<value>BVALUE2</value>
</KeyValuePair>
</dict>
你可以这样写:
string value = xmlDoc.SelectSingleNode("//KeyValuePair[key = 'B']/value").InnerText;
祝你好运!