按日期从xml过滤记录

时间:2015-03-03 09:18:22

标签: vbscript

我希望从xml以下获取2014-07-15T00:00:00-05:00日期的记录。我怎样才能使用vbscript实现这个目标?目前我正在使用它,但无法使用。

设置colNodes = xmlDoc.selectNodes _
“( “// XYZ / ABC [日期和GT; '2014-07-14T00:00:00-05:00']”)

<xyz>
<abc>
<date>2014-07-14T00:00:00-05:00</date>
<text>test1</text>
</abc>
<abc>
<date>2014-07-14T00:00:00-05:00</date>
<text>test2</text>
</abc>
<abc>
<date>2014-07-15T00:00:00-05:00</date>
<text>test3</text>
</abc>
<abc>
<date>2014-07-15T00:00:00-05:00</date>
<text>test4</text>
</abc>
<abc>
<date>2014-07-15T00:00:00-05:00</date>
<text>test5</text>
</abc>
</xyz>

1 个答案:

答案 0 :(得分:0)

an answer to a related question开始,我尝试了这个,似乎有效:

Option Explicit

dim xml: xml = "<xyz><abc><date>2014-07-14T00:00:00-05:00</date><text>test1</text></abc><abc><date>2014-07-14T00:00:00-05:00</date><text>test2</text></abc><abc><date>2014-07-15T00:00:00-05:00</date><text>test3</text></abc><abc><date>2014-07-15T00:00:00-05:00</date><text>test4</text></abc><abc><date>2014-07-15T00:00:00-05:00</date><text>test5</text></abc></xyz>"

'note version 6.0 of the DOM Document
dim xmldoc: set xmldoc = CreateObject("MSXML2.DomDocument.6.0")
xmldoc.async = false
' error check your XML, quit 
if not xmldoc.loadXML(xml) then
    WScript.Echo xmldoc.parseError.reason
    WScript.Quit 1
end if

dim nodes: set nodes = xmldoc.selectNodes("//xyz/abc[number(translate(date, '-.:T', ''))>number(translate('2014-07-14T00:00:00-05:00', '-.:T', ''))]")

' put results into fragment because we won't have a full valid XML document
dim frag: set frag = xmldoc.createDocumentFragment()
dim node
for each node in nodes
    frag.appendChild node
next 'node
' use result
WScript.Echo frag.xml

诀窍是认识到XPath和XSL 1.0似乎不支持DateTime类型,因此为了运行数字比较,我们在转换为数字之前使用translate()从数据值中删除任何标点符号。

这方面的一个问题是它没有考虑您的时区组件,因此如果日期完全不同于时区,则可能会得到不正确的结果。这至少是一个起点。