情境:
我正在使用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>
答案 0 :(得分:3)
使用SelectNodes方法,它会为您提供与Xpath匹配的所有节点的列表
答案 1 :(得分:1)
你的问题的答案是,“这取决于”。
这取决于您打算如何处理“重复”节点。具有相同名称的不止一个是什么意思?在生成XML的程序中是错误的吗?它是否正确,并且允许无限数量的此类节点?当有多个时,它们意味着什么?
在设计处理“重复”节点的代码之前,您需要先回答这些问题。