1

我有一个复杂的结构 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 示例由于其结构而使我感到困惑。请帮忙!

4

1 回答 1

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;

祝你好运!

于 2012-08-03T09:54:24.217 回答