Gir*_*rdi 20 c# xml xpath .net-3.5
我在处理一些XML文件时遇到了麻烦(这篇文章末尾).
我编写了以下代码,以获取Job_Id与给定Job_Name模式相关的数据,该模式的所有者Job_Owner是运行probram的用户:
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);
}
Run Code Online (Sandbox Code Playgroud)
我希望node.SelectSingleNode("//Job_Name")寻找一个Job_Name仅以xml代码命名的标签node.
这不是它似乎发生的事情,因为它总是返回相同的节点,无论它在哪一步都无关紧要foreach(即node从nodes变化中选择,但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>
Run Code Online (Sandbox Code Playgroud)
小智 23
这是因为你在XPath中使用'//'语法.该特定语法选择名为that的文档中的第一个节点.尝试查看https://www.w3schools.com/xml/xpath_syntax.asp以获取有关XPath语法的信息.
如果您正在寻找子节点,请尝试使用节点名称(IE:'Job_Owner'而不是'// Job_Owner')
Mat*_*hen 18
Infernex87是正确的,Job_Owner对于这种情况来说简单有效.但是,如果它不是直接的孩子,你可以这样做:
.//Job_Owner
Run Code Online (Sandbox Code Playgroud)
就像目录一样,.是当前节点,因此这会找到当前节点的后代,而不是文档的根.
| 归档时间: |
|
| 查看次数: |
68713 次 |
| 最近记录: |