JasonT80 wrote:
Quote:
2. How can I query all of "Log" records in a single "Site" for an average
"ResponseTime"?
>
------------------------------
>
<?xml version="1.0" standalone="yes" ?>
<Sites>
<Site Host="www.mysite1.com" IP="1.1.1.1" />
<Site Host="www.mysite2.com" IP="1.1.1.2" />
<Site Host="www.mysite3.com" IP="1.1.1.3">
<Log Time="1/1/2008 12:00:00 AM" Status="Success" ResponseTime="10" />
<Log Time="1/1/2008 12:00:01 AM" Status="Failure" ResponseTime="10" />
</Site>
<Site Host="www.mysite4.com" IP="1.1.1.4">
<Log Time="1/1/2008 12:00:00 AM" Status="Success" ResponseTime="10" />
<Log Time="1/1/2008 12:00:01 AM" Status="Failure" ResponseTime="10" />
</Site>
</Sites>
Here is an example that computes the average ResponseTime for those Site
elements that have at least on Log child element with a ResponseTime
attribute:
Imports System
Imports System.Xml.XPath
Module Module1
Sub Main()
Dim doc As New XPathDocument("..\..\XMLFile1.xml")
For Each site As XPathNavigator In
doc.CreateNavigator().Select("Sites/Site[Log/@ResponseTime]")
ComputeAverage(site)
Next
End Sub
Sub ComputeAverage(ByVal site As XPathNavigator)
Console.WriteLine(site.Evaluate("sum(Log/@ResponseTime) div
count(Log/@ResponseTime)"))
End Sub
End Module
So with XPath the solution is to evaluate the XPath expression
sum(Log/@ResponseTime) div count(Log/@ResponseTime)
with the Site element as the context node.
--
Martin Honnen --- MVP XML
http://JavaScript.FAQTs.com/