[C#] XPath troubles

Pagina: 1
Acties:

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34

Hoi.

Ik heb wat problemen met het selecteren en uitlezen van een node in een
xml-document mbhv XPath.

M'n XML document ziet er bv als volgt uit:
[nohtml]
code:
1
2
3
4
5
6
7
8
9
10
11
<logconfig>
  <logger type="textfile">
    <name>logfile.txt</name>
  </logger>
  <logger type="xmlfile">
    <name>logfile.xml</name>
  </logger>
  <logger type="database">
    <name>connectionstring</name>
  </logger>
</logconfig>
[/nohtml]

In m'n C# programma wil ik nu, afhankelijk van een bepaalde parameter een bepaalde node uitlezen.
Dit probeer ik te doen dmv volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
XPathDocument       configFile;
XPathNavigator          searchNode;
XPathNodeIterator       configNode;
string                  XPathQuery;


configFile = new XPathDocument(@"c:\logconfig.xml");

searchNode = configFile.CreateNavigator();

XPathQuery = "/logconfig/logger[@type=\'";

switch (sourceType)
{
    case LogSourceType.LogToDb :
        XPathQuery += "database\']/name";
        break;
    case LogSourceType.LogToTextFile :
        XPathQuery += "textfile\']/name";
        break;
    case LogSourceType.LogToXML :
        XPathQuery += "xmlfile\']/name";
        break;
    default :
        throw new ArgumentException();                  
}

configNode = searchNode.Select(XPathQuery);

}



Aangezien m'n XPath query er bv als volgt uit ziet:
code:
1
/logconfig/logger[@type='textfile']/name

veronderstel ik dat er dus in configNode de name node zit van de betreffende logger - node.
Dus, dan denk ik dat ik, als ik de waarde van de node als volgt uitlees:
code:
1
configNode.Current.Value;

Ik in dit geval textfile.txt moet terugkrijgen.

Niets is echter minder waar.... Ik krijg blijkbaar alle name - node's terug, en niet alleen dat van de betreffende logger - node:
code:
1
logfile.txtlogfile.xmldatasource

is wat ik terug krijg....

Ikke nie snap. :P
Is er wat fout met m'n xpath-query? Of zie ik iets over het hoofd in m'n C# code?

https://fgheysels.github.io/


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:17

mulder

ik spuug op het trottoir

.InnerText ?

oogjes open, snaveltjes dicht


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
Een XPathNodeIterator kent blijkbaar geen InnerText property...
Ik dacht dat de Value property van een XPathNodeIterator precies dat teruggaf, maar blijkbaar heeft hij de Value terug van alle nodes in m'n xml-document.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
'k snap er niks meer van...
Als ik in m'n debugger kijk, dan is het NodeType van configNode Root. De Name property is "" en in de value property staan idd alle waarden van die name tag.
:?

https://fgheysels.github.io/


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:17

mulder

ik spuug op het trottoir

Ken xml niet zo goed, en heb die XPath niet nog nooit gebruikt, ben net zelf een beetje bezig met de XmlNodes enzo, maar goed een poging:
Note The XPathNodeIterator is initially positioned on the context node from which the node set was selected. MoveNext must be called to move the XPathNodeIterator to the first node in the selected set.
Kreeg een stuk minder values terug :P

oogjes open, snaveltjes dicht


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
Ik heb het opgelost, maar ik snap niet goed waarom ik het als volgt moet doen.

Als ik, voor ik de Value property uitlees, eerst een movenext doe, dan krijg ik wel de juiste waarde
code:
1
2
configNode.MoveNext();
destination = configNode.Current.Value;

:?

https://fgheysels.github.io/


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:17

mulder

ik spuug op het trottoir

Zie de quote in m'n post... rtfm! :P

oogjes open, snaveltjes dicht

Pagina: 1