【发布时间】:2011-12-03 07:48:44
【问题描述】:
我在处理一些 XML 文件时遇到了问题(在本文末尾)。
我编写了以下代码以获取与给定Job_Name 模式相关的Job_Id 数据,该模式的所有者Job_Owner 是运行程序的用户:
List<String> jobID = new List<String>();
XmlNodeList nodes = xml.SelectNodes("//Job");
foreach (XmlNode node in nodes)
{
innerNode = node.SelectSingleNode("//Job_Owner"); // SelectSingleNode here always selects the same node, but I thought it should be relative to node, not to nodes
if (!innerNode.InnerText.Contains(Environment.UserName))
{
continue;
}
innerNode = node.SelectSingleNode("//Job_Name");
if (!Regex.IsMatch(innerNode.InnerText, jobNamePattern, RegexOptions.Compiled))
{
continue;
}
innerNode = node.SelectSingleNode("//Job_Id");
jobID.Add(innerNode.InnerText);
}
我希望node.SelectSingleNode("//Job_Name") 只在node 表示的xml 代码下寻找一个名为Job_Name 的标签。
这似乎不是正在发生的事情,因为它总是返回相同的节点,在foreach 的哪个步骤它是无关紧要的(即从nodes 更改中选择的node,但是node.SelectSingleNode("//Job_Name") 总是返回相同的内容)。
这段代码有什么问题?
提前致谢!
--
XML 文件如下所示:
<Data>
<Job>
<Job_Id>58282.minerva</Job_Id>
<Job_Name>sb_net4_L20_sType1</Job_Name>
<Job_Owner>mgirardis@minerva</Job_Owner>
<!--more tags-->
</Job>
<Job>
<!--etc etc etc-->
</Job>
<!--etc etc etc-->
</Data>
【问题讨论】: