Mam problem z zajęciem się jakimś plikiem XML (który znajduje się na końcu tego posta).Jakie jest prawidłowe użycie XmlNode.SelectSingleNode (ciąg xpath) w języku C#?
Napisałem następujący kod w celu uzyskania Job_Id
danych związanych z danym Job_Name
wzór, którego właściciel Job_Owner
jest użytkownik uruchamiający 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);
}
Spodziewam się, że node.SelectSingleNode("//Job_Name")
poszukuje dla tagu nazwie Job_Name
tylko pod kodem xml reprezentowanym przez node
.
To nie jest to, co wydaje się dziać, ponieważ zawsze zwraca ten sam węzeł, nie ma znaczenia, na jakim etapie foreach
to jest (czyli node
wybrane spośród nodes
zmian, ale zawsze zwracają node.SelectSingleNode("//Job_Name")
ta sama treść).
Co jest nie tak z tym kodem?
Z góry dziękuję!
-
pliku XML wygląda następująco:
<Data>
<Job>
<Job_Id>58282.minerva</Job_Id>
<Job_Name>sb_net4_L20_sType1</Job_Name>
<Job_Owner>[email protected]</Job_Owner>
<!--more tags-->
</Job>
<Job>
<!--etc etc etc-->
</Job>
<!--etc etc etc-->
</Data>
Ten program jest teraz gotowy do pracy! =) ~ Dzięki za odpowiedzi! – Girardi