Tanken med XPath:en i nedan exempel är att alla böcker som har ett pris över 35 skall listas. Men jag får bara fram alla böcker i XML-filen. Vad är galet? Sedan när selecteringen fungerar kommer problemet .. Hur skall jag få tag på title och price var och för sig och inte i en sträng? Tycker det borde vara genom <b>objIterator.Current.Select("title")</b> resp <b>objIterator.Current.Select("price")</b> Tycker det borde vara genom <b>objIterator.Current.Select("title").Value</b> resp <b>objIterator.Current.Select("price").Value</b> saknar inte frågan ett @ tecken? Nej, @ används vid attribut och price är inte ett attribut utan ett vanligt element. Hade XML:en lydit <book price="40"> skulle man ha använt @. XPathNodeIterator objektet du får från select-metoden är inte positionerat på första noden i urvalet förrän du anropat objIterator.MoveNext(). Xpath ... ?
(XML-fil och Xpath-frågan kommer ifrån http://www.w3schools.com/xpath/xpath_syntax.asp )
<code>
Dim objDoc As New XPathDocument("c:\book.xml")
Dim objNav As XPathNavigator = objDoc.CreateNavigator
Dim objIterator As XPathNodeIterator = objNav.Select("/bookstore/book[price>35.00]")
Dim olle As String
olle = objIterator.Current.Value
</code>
<code>
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
</code>Sv: Xpath ... ?
Sv:Xpath ... ?
Sv: Xpath ... ?
Sv: Xpath ... ?
alltså, borde den inte vara på följande sätt
/bookstore/book[@price>35.00]
Sv:Xpath ... ?
Sv:Xpath ... ?
1. objIterator.Current.Select("price").Value ....funkar inte
2. Går det att få Xpath att sortera datat stigande eller fallande ? Om det går hur gör man?Sv: Xpath ... ?
Från början pekar den på noden på vilken select anropades, i det här fallet dokumentnoden.
MoveNext returnerar en bool, så det är smidigast att lägga det som test i en while-loop.
Att sedan hämta värdena hos child-elementen gör du enklast med SelectSingleNode.
while ( objIterator.MoveNext() )
{
string title = objIterator.Current.SelectSingleNode( "title" ).Value;
string price = objIterator.Current.SelectSingleNode( "price" ).Value;
// Gör något intressant...
}
Sv:Xpath ... ?
När jag nu läser av min XML poster så skulle det vara kul att kunna styra stigande/fallande för en kollumn. Är det möjligt. Om möjligt hur?
Min labb kod.
<code>
Dim nodName As String
Dim nodValue As String
Dim nodNr, antalrows, antalcols As Integer
Dim Radtowrite As String
Dim xPath As String = "/MyData/MyPos[C5='2630']"
Dim document As XPathDocument = New XPathDocument(xmlFile)
Dim navigator As XPathNavigator = document.CreateNavigator()
Dim nodes As XPathNodeIterator = navigator.Select(xPath)
antalrows = nodes.Count
While nodes.MoveNext()
Dim nodesNavigator As XPathNavigator = nodes.Current
Dim nodesText As XPathNodeIterator = nodesNavigator.SelectDescendants(XPathNodeType.Element, False)
antalcols = nodesText.Count
Radtowrite = ""
While nodesText.MoveNext()
nodNr = nodesText.CurrentPosition
nodName = nodesText.Current.Name
nodValue = nodesText.Current.Value
Radtowrite += " " & nodValue
End While
Label1.Text += Radtowrite & "<br><br>"
End While
</code>