/ / Daty testowania XPath - vb.net, xpath

Daty testów XPath - vb.net, xpath

"Polowałem wysoko i nisko i znalazłem bardzo interesującą funkcjonalność z XPATH, ale nie znalazłem sposobu na przetestowanie DAT.

Mam atrybut Date, który chcę użyć do pobrania kolekcji węzłów.

<History>
<item>
<Name>string</Name>
<Location>string</Location>
<VisitDate>01/08/2013</VisitDate>
<Description>string</Description>
</item>
</History>

Kod XPath z powodzeniem znajduje równe wartości, ale muszę wykonać test =>.

Dim doc As New Xml.XmlDocument
doc.Load(filename)
Dim d As Date = DateAdd(DateInterval.Day, -7, Today)
s = "//History/item[VisitDate=>"" & d.ToString("dd/MM/yyyy") & ""]"
Dim nodes As Xml.XmlNodeList = doc.SelectNodes(s)

Teraz to nie działa, ale jest błędne SelectNodes(s), więc oczywiście nie lubi ">" bitów.

Czy są jakieś funkcje "Date" w XPath, znalazłem boolean(); concat(); true(); not true(); translate(); substring() itp., i przypuszczam, że zamierzam w końcu użyć kombinacji tych i być może innych, ale nie mogę wymyślić, jak to zrobić "większego niż".

Czy jest ktoś tam ze zrozumieniem XPath w tym obszarze?

Odpowiedzi:

1 dla odpowiedzi № 1

Zawsze stwierdziłem, że najprostszym sposobem porównania dat w XPath jest przekonwertowanie ich na liczby całkowite w formacie YYYYMMDD, tj. Standardowy format daty XML, ale z usuniętymi łącznikami.

W efekcie uzyskujesz skuteczne porównanie następujących elementów:

translate("2013-08-01", "-", "") > 20130824

Szkoda, że ​​twoje daty są zapisywane jako DD / MM / YYYY zamiast YYYY-MM-DD, ponieważ oznacza to, że będziesz musiał pracować z substring() zreorganizować wartości, ale powinno to być łatwe.


0 dla odpowiedzi nr 2

XPath 2.0 ma znacznie lepszą zdolność operowania datą i czasem niż XPath 1.0. Natywny procesor XPath w .NET obsługuje tylko XPath 1.0, ale wsparcie dla wersji 2.0 jest dostępne w co najmniej dwóch produktach firm trzecich działających pod kontrolą .NET: Saxon (mój produkt) i XmlPrime.

XPath 2.0 nadal wymaga daty w formacie ISO yyyy-mm-dd, ale jest to łatwe do przekształcenia dd/mm/yyyy, na przykład za pomocą wyrażeń regularnych.