需要C#解决方案来读取xml元素值

时间:2012-08-03 09:31:16

标签: c# xml-parsing xmlnode

我有一个复杂的结构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示例,因为它的结构使我感到困惑。请帮忙!

1 个答案:

答案 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;

祝你好运!