处理XML中的重复节点

时间:2010-05-04 19:14:06

标签: c# xml

情境:

我正在使用C#解析XML文件中的值,并使用以下方法:

    private static string GetXMLNodeValue(XmlNode basenode, string strNodePath)
    {
        if (basenode.SelectSingleNode(strNodePath) != null)
            return (basenode.SelectSingleNode(strNodePath).InnerText);
        else
            return String.Empty;
    }

要从XML文件中获取特定值,我通常会传递根节点和类似“parentnode / item”的路径

我最近遇到了一个问题,即同一文档级别的两个节点共享同一个名称。

为什么:

需要读取和使用重复节点;它们具有不同值的子节点(可以区分它们)。目前我只有两个节点,每个节点名为< Process>和名为< Name>的子节点其中包含唯一的名称。其他子节点包含各种值,例如内存使用情况。在处理和存储子节点的值时,我基本上会忽略父节点名称,并根据子节点< Name>使用我自己的名称。值。

问题:

明确获取重复命名节点的值的最佳方法是什么?我的想法是将与节点名称匹配的所有值加载到数组中,然后使用数组索引来引用它们。不过,我不知道如何实现它。 (我不擅长XML导航。)

示例XML

<?xml version="1.0" ?>
<info>
  <processes>
    <process>
        <name>program1</name>
        <memory_use>24.8</memory_use>
    </process>
    <process>
        <name>program2</name>
        <memory_use>19.0</memory_use>
    </process>
  </processes>
</info>

2 个答案:

答案 0 :(得分:3)

使用SelectNodes方法,它会为您提供与Xpath匹配的所有节点的列表

答案 1 :(得分:1)

你的问题的答案是,“这取决于”。

这取决于您打算如何处理“重复”节点。具有相同名称的不止一个是什么意思?在生成XML的程序中是错误的吗?它是否正确,并且允许无限数量的此类节点?当有多个时,它们意味着什么?

在设计处理“重复”节点的代码之前,您需要先回答这些问题。