getting strongly typed results from an XPath query?

Hi;

Is there an easy way, when I am iterating through the nodes returned
from an XPath query, to get typed results. I need to know if it's a
DateTime, decimal, or string. This is more than just what node it is
because an XPath can be the result of a count or other operation where
the resulting type has nothing to do with any node type.

I optionally have a schema - but not always.

??? - thanks - dave


david@at-at-at@windward.dot.dot.net
Windward Reports -- http://www.WindwardReports.com
me -- http://dave.thielen.com

Cubicle Wars - http://www.windwardreports.com/film.htm
0
thielen (152)
11/12/2009 6:22:17 PM
dotnet.xml 7266 articles. 0 followers. Follow

5 Replies
755 Views

Similar Articles

[PageSpeed] 17

Hello Dave,

We can call XPathNavigator.Evaluate method to evaluate a XPathExpression, 
and returns the typed result. The following example evaluates an 
XPathExpression and returns a Double using the Current node of the 
XPathNodeIterator as the context node,

----------------------------------------------------------------------------
------------------------
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();

XPathNodeIterator nodes = navigator.Select("//book");
XPathExpression query = nodes.Current.Compile("sum(descendant::price)");

Double total = (double)navigator.Evaluate(query, nodes);
Console.WriteLine("Total price for all books: {0}", total.ToString());
----------------------------------------------------------------------------
-------------------------


Best regards,
Ji Zhou
Microsoft Online Community Support

0
colbertz (6)
11/13/2009 10:12:58 AM
David Thielen wrote:

> Is there an easy way, when I am iterating through the nodes returned
> from an XPath query, to get typed results. I need to know if it's a
> DateTime, decimal, or string. This is more than just what node it is
> because an XPath can be the result of a count or other operation where
> the resulting type has nothing to do with any node type.

XPath 1.0 only knows the types number (which is a double), string, 
boolean, node-set. So I am not sure why you expect a DateTime or decimal 
from an XPath expression, unless you use a third party XPath 2.0 
implementation where that is possible.

Also if you are "iterating through nodes" then it can't be a count or 
other expression not returning a node-set.

Generally, with Microsoft's XPath 1.0 implementation, XPathNavigator, if 
you use the Evaluate method
http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.evaluate.aspx
you get a .NET object returned, the mapping of XPath types to .NET types 
is as follows:
   "The result of the expression (Boolean, number, string, or node set). 
This maps to Boolean, Double, String, or XPathNodeIterator objects 
respectively."

If you have an XPathNodeIterator and iterate over it then you are 
dealing with an XPathNavigator for the current item and XPathNavigator 
has properties 
(http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator_properties.aspx)
TypedValue and ValueType and additionally properties like ValueAsDateTime.


-- 

	Martin Honnen --- MVP XML
	http://msmvps.com/blogs/martin_honnen/
0
mahotrash (1778)
11/13/2009 11:11:53 AM
On Fri, 13 Nov 2009 12:11:53 +0100, Martin Honnen <mahotrash@yahoo.de>
wrote:

>David Thielen wrote:
>
>> Is there an easy way, when I am iterating through the nodes returned
>> from an XPath query, to get typed results. I need to know if it's a
>> DateTime, decimal, or string. This is more than just what node it is
>> because an XPath can be the result of a count or other operation where
>> the resulting type has nothing to do with any node type.
>
>XPath 1.0 only knows the types number (which is a double), string, 
>boolean, node-set. So I am not sure why you expect a DateTime or decimal 
>from an XPath expression, unless you use a third party XPath 2.0 
>implementation where that is possible.
>
>Also if you are "iterating through nodes" then it can't be a count or 
>other expression not returning a node-set.
>
>Generally, with Microsoft's XPath 1.0 implementation, XPathNavigator, if 
>you use the Evaluate method
>http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator.evaluate.aspx
>you get a .NET object returned, the mapping of XPath types to .NET types 
>is as follows:
>   "The result of the expression (Boolean, number, string, or node set). 
>This maps to Boolean, Double, String, or XPathNodeIterator objects 
>respectively."
>
>If you have an XPathNodeIterator and iterate over it then you are 
>dealing with an XPathNavigator for the current item and XPathNavigator 
>has properties 
>(http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator_properties.aspx)
>TypedValue and ValueType and additionally properties like ValueAsDateTime.

Please correct me if I'm worng - this means for a DateTime I will get
a string and need to know the format it is in.

Also, how does it know a result is a number if a node value is
<node>123.45</node> when the next one could be <node>dave</node>?

thanks - dave

david@at-at-at@windward.dot.dot.net
Windward Reports -- http://www.WindwardReports.com
me -- http://dave.thielen.com

Cubicle Wars - http://www.windwardreports.com/film.htm
0
thielen (152)
11/13/2009 6:38:16 PM
David Thielen wrote:

>> If you have an XPathNodeIterator and iterate over it then you are 
>> dealing with an XPathNavigator for the current item and XPathNavigator 
>> has properties 
>> (http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator_properties.aspx)
>> TypedValue and ValueType and additionally properties like ValueAsDateTime.
> 
> Please correct me if I'm worng - this means for a DateTime I will get
> a string and need to know the format it is in.

Has the XML document you are querying been validated successfully? Is 
the element type xsd:dateTime?

> Also, how does it know a result is a number if a node value is
> <node>123.45</node> when the next one could be <node>dave</node>?

If there is no schema respectively if the XML document has not been 
validated then the no type information is available. You can then try 
one of the ValueAsSomeType methods to check whether the untyped string 
in the element can be converted to the type, they will throw an 
exception if conversion is not possible.

If the XML has been validated then you can't have two elements of the 
same name (e.g. 'node') with different types in the same context.

-- 

	Martin Honnen --- MVP XML
	http://msmvps.com/blogs/martin_honnen/
0
mahotrash (1778)
11/13/2009 6:51:34 PM
On Fri, 13 Nov 2009 19:51:34 +0100, Martin Honnen <mahotrash@yahoo.de>
wrote:

>David Thielen wrote:
>
>>> If you have an XPathNodeIterator and iterate over it then you are 
>>> dealing with an XPathNavigator for the current item and XPathNavigator 
>>> has properties 
>>> (http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathnavigator_properties.aspx)
>>> TypedValue and ValueType and additionally properties like ValueAsDateTime.
>> 
>> Please correct me if I'm worng - this means for a DateTime I will get
>> a string and need to know the format it is in.
>
>Has the XML document you are querying been validated successfully? Is 
>the element type xsd:dateTime?

Generally we have to handle XML with no schema. So we'll have to do
the tryAs.

thanks - dave

david@at-at-at@windward.dot.dot.net
Windward Reports -- http://www.WindwardReports.com
me -- http://dave.thielen.com

Cubicle Wars - http://www.windwardreports.com/film.htm
0
thielen (152)
11/16/2009 5:59:46 PM
Reply:

Similar Artilces:

Sorting Search Results
I there a way to sort search results to see the messages with the latest responses first? Thanks, ...

i get error 404 not found when trying to download
I'm trying to download nokia pc suite to windows xp to upload gallery onto the computer but get error message404 not found - how can i download this pc suite please -- Krysy Albutt Krysy Albutt wrote: > I'm trying to download nokia pc suite to windows xp to upload gallery > onto the computer but get error message404 not found - how can i > download this pc suite please Care to enlighten us how this pertains to: - 1) Microsoft 2) Publisher 3) Windows If you're having problems downloading from the *NOKIA* site where do you think you should be directing your ...

IIf Statement in Query Criteria 12-11-09
I have the following code in a query: SELECT qryPointsWithDropOffDates.EMPLOYEEID, qryPointsWithDropOffDates.SSN, qryPointsWithDropOffDates.NAME, qryDisciplineNoticesReprint.LASTINCIDENTDATE, qryPointsWithDropOffDates.INCIDENTDATE, qryPointsWithDropOffDates.TYPESHORT, qryPointsWithDropOffDates.POINTVALUE FROM qryDisciplineNoticesReprint INNER JOIN qryPointsWithDropOffDates ON qryDisciplineNoticesReprint.SSN=qryPointsWithDropOffDates.SSN WHERE (((qryPointsWithDropOffDates.INCIDENTDATE) Between [qryDisciplineNoticesReprint.CALCDATE] And [qryDisciplineNoticesReprint.LASTINCIDENTD...

How to get Calendar to send me reminders
I have changed my e-mail address but for some reason I cannot get Calendar to send reminders to my new address - I think I have carried out all that is necessary to effect the changover but I am not getting reminders sent. Can anyone help please? Is the Calendar Live ID based and accessible at Calendar.live.com ? -- ....winston ms-mvp mail "Dabardevon" wrote in message = news:FDC2B3B2-EDE4-41B1-BFC4-C0F9ED59CFB9@microsoft.com... I have changed my e-mail address but for some reason I cannot get = Calendar to send reminders to my new address - I think I have...

expression with mixed types
Hello! if I have this expression long = int * uint * ushort * short; how is the implicit conversion done here for the different types in this expression. //Tony Tony Johansson wrote: > Hello! > > if I have this expression > long = int * uint * ushort * short; That's not legal C# syntax. Are you trying to refer to some arbitrary expression where the operands have the given types? > how is the implicit conversion done here for the different types in this > expression. See section 6.1, "Implicit conversions" in the C# specificati...

Some recipients get the attachment, some get winmail.dat
This one has me baffled. We are using Exchange 2000 and Outlook 2000 and have been for 8 months. No previous problems with attachments (.doc, .xls, .jpg). About 2 weeks ago, we started hearing from certain recipients that the attachment wasn't arriving; instead they were getting an unreadable file called winmail.dat. MS says that this is because the sender is using Rich Text to format the email. We have changed the senders to use Plain Text and still have the same problem. If the email is sent to several recipients, some will get the attachment fine, some will not. This didn'...

How to get the CScrollBar's Handle in CTreeCtrl?
Hey,All: I thought I have a problem when I trid to get the CScrollBar's handle from my CTreeCtrl extended handle. Can anybody tell me whether I can get the handle of the CScrollBar from the CTreeCtrl? Thanks in advance! Carl :-| Carl wrote: > Hey,All: > > I thought I have a problem when I trid to get the CScrollBar's handle from > my CTreeCtrl extended handle. > Can anybody tell me whether I can get the handle of the CScrollBar from the > CTreeCtrl? > > Thanks in advance! > Carl > :-| > > Sorry, it is not that simple. The scroll bars that...

A Crystal Beginner
I am using Crystal 9.2.4.77 and have loaded the Crystal enhancements. Now I want to do against the CRM database. What do I do? I thought I would create a data source to the CRM SQLserver, which I did, then connect to it through Crystal Reports. That works, but when I drill down on the AAA_MSCRM database to choose my tables, it shows me dbo as the only option (where did this come from??) and under that are just a few generic tables. No CRM tables. Something's not quite right. What am I missing? file - log on to aps server "KBLawson" <klawson@aetinc.com> wrote in ...

Unknown file exporting type. Please pick a new export type.
Hello, Has anyone ever seen the error message "Unknown file exporting type. Please pick a new export type." It has begun appearing when trying to use the Report Schedule within GP and after clicking Publish Now. This just began occurring in one company, but continues to work fine in other companies. The file export type is typically Adobe PDF, but users also receive this when switching to other types such as Text file. This is occurring on the server and at least two workstations. Has anyone seen this error before or does anyone have any thoughts on a resolution for it? ...

Cannot get fast forward or fast reverse to work with WMP 11
I am running Vista Home Premium on a HP G 217-EM Notebook which comes pre-installed with Windows Media Player 11. When I play cds and try to fast forward or fast reverse by keeping the fast forward or fast reverse buttons constantly depressed nothing happens. Why is this, and can anyone come up with a solution? Many thanks This doesn't work on my system either, so it's probably just a limitation of WMP. Fast forward and fast reverse should work fine when you rip the CD's to MP3 or WMA files, and play these files instead. Regards -- Tim De Baets http://www....

Get paid while you get online!!
I found a great Internet company - Cashfiesta.com - that has created a product everyone can benefit from. They pay you while you work or play on your computer. All you need to do is keep their software - the FiestaBar=99 - active while you are online. They even pay you when your friends are using their computers. Unlike other companies, Cashfiesta gives you control over how much money you earn. They have an individual payrate based on the number of Special Offers you sign up for. As some of these offers are free, you can increase your payrate up to 33 times without spending a penny. It's...

Can't get auto-update (update) to install
Version: 2008 Operating System: Mac OS X 10.4 (Tiger) Processor: Power PC I've been trying to manually check for updates to Word 2008, and I get a &quot;critical update&quot; notice, asking me to install auto-update. When I try to install it, I cannot. It just keeps repeating the attempt, in an &quot;endless loop.&quot; What to do? <br> Thank you. ...

Spreadsheet getting corrupted
Hello All: I have a relatively large spreadsheet. I am getting errors (see after my signature line). What could be causing these errors? Is it that the spreadsheet is too large? Thanks Deguza -------------------------------------------------------- Microsoft Office Excel File Repair Log Errors were detected in file 'C:\Documents and Settings\deguza\My Documents\sales\Sales_2006_2007.xls' The following is a list of repairs: Global PivotTable report information was repaired due to integrity problems. Global PivotTable report information was repaired due to integrity problems. Glo...

Reg getting the next IV Document Number field !
Hi, I am creating a window in dexterity similar to the item transaction entry window (Transactions>Inventory> Transaction Entry). In the Item transaction Entry window, the Document number field defaults to the next document number when we move the focus to that field. I wanted to know if there is any function , or table that i can access to get the next document number in the new window that i am creating. Thanks, swetha -- swetha >In the Item transaction Entry window, the Document number field defaults to the next document number when we move the focus to that field.< T...

How do I get??
Sorry if this seems a fairly easy question to you guys. I have a spreadsheet and I need to get the current system time into a cell. The format of the time is hh:mm am/pm. Any assistance would be most helpful. Hi try =INT(NOW()) in this cell and format is to your needs -- Regards Frank Kabel Frankfurt, Germany PM wrote: > Sorry if this seems a fairly easy question to you guys. > > I have a spreadsheet and I need to get the current system time into a > cell. The format of the time is hh:mm am/pm. > > Any assistance would be most helpful. PM, in the cell you want pu...

Get notified when Out of Office is on
I am using Outlook 2007. With 2003, when returning from leave, I used to get a notification that the Outlook out of office was still on and asking me if I wanted to switch it off. This reminder no longer appears with 2007. How can I switch this setting on so that I get the notification? "Mary Ann" <MaryAnn@discussions.microsoft.com> wrote in message news:ED5533A7-D0EA-41B8-B1A0-A9D15FB6FD98@microsoft.com... >I am using Outlook 2007. With 2003, when returning from leave, I used to get > a notification that the Outlook out of office was still on and asking me ...

Getting Control ID in Active X control
GetWindowLong return 0. You need to call GetDlgCtrlID from outside the activex control as the function available within the control returns an arbitrary value of zero. Take a look at this article http://xendra.ens.uabc.mx/~sinfante/loo/libro/ch17_4.htm particularly the paragraph preceeding the title "MFC and Ambient Properties". This really begs the question why you want the ID in the first place as activex controls have to be fully self containing to operate - with a few exceptions where sibling controls need to be able to locate each other. - Tim "ytv" <...

over VPN, it gets stuck when sending outgoing email
When I use VPN to connect to work from home, the outlook can not finish sending outgoing emails. The progress bar moves to the end but then stops there forever. It can never finish. The receiving of new incoming emails work fine. All other network functionality works, e.g. internet browsing, telnet, ftp, etc, all work fine. My system is win2k. I use linksys wireless DSL router. I'd appreciate any hint! Are you using Exchange server? I'd set up your mail profile to prompt you to work offline or online - when using VPN, work offline with scheduled syncs. If not using exchange, pos...

Microsoft Support Queries (on Biztalk)
Hello concern, We have got some queries from Customer on Biztalk integration with IBM MQ. Customer using Biztalk Adapter for MQ Series to plug in to the MQ Queues and consumes the messages which are coming from ERPLN. The following are the question from Customer. "Could you please confirm that MQ messages are deleted once they're read by BizTalk application? If we were to pull the MQ Messages' data to 2 systems, does that mean we have to design a BizTalk application that processes the same data and send to 2 systems at the same time? Meaning, the same messages will no...

Get photos from a camera
I have an asp.net intranet application that I need to upload 1 or all photos from a digital camera at a PC workstation. We are using DataGrids and GridViews to display them on the web once they are uploaded but need something at the client. I assume I need some sort of ActiveX process or something. Has anyone run into a solution for this need? Thanks. -- David "DavidC" <dlchase@lifetimeinc.com> wrote in message news:2B061F4F-B548-4AA4-96FA-2F87383192D2@microsoft.com... > I have an asp.net intranet application that I need to upload 1 or all > photos ...

how to get the format of this cell right?
When I let go: Selection.Replace " ", Replacement:="-", Lookat:=xlPart, _ SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False " " is entered by means of an array: Words = Array(" ", "+", "/", "---", "--", "&") on a cell containing: 5 a I would expect to get: 5-a as a result. Unfortunately, it produces 5:00:00-AM. How can I solve this tiny but frustrating problem? best regards Pet...

limiting results
I hope I can explain this properly. I have a sheet with 100 results but I only want to display the last 4 results on another sheet if there are more than 4 results - so the results displayed would be 97,98,99,100. Anyone have a suggestion? thanks JT On Fri, 9 Dec 2011 20:02:11 -0600, "JT" <grouch_45@hotmail.com> wrote: >I hope I can explain this properly. > >I have a sheet with 100 results but I only want to display the last 4 >results on another sheet if there are more than 4 results - so the results >displayed would be 97,98,99,100. > >Anyone ...

How do I get my best friend back?
I NEED TO KNOW "monsterboy16" <monsterboy16@discussions.microsoft.com> wrote in message news:7918DF09-EB34-46E4-852E-8DAAC3FFF45F@microsoft.com... > I NEED TO KNOW Easy. Just lift the lid on your toilet seat and whistle. Dipshit! -- "Don't pick a fight with an old man. If he is too old to fight, he'll just kill you." Pretend that you're in a coma and unable to communicate in any way (such as posting messages in newsgroups). "monsterboy16" <monsterboy16@discussions.microsoft.com> wrote in message news...

how to get the pointer variable address from a dll
hi all, I have a DLL which has a output parameter LPVOID, A application calls this DLL function, the Dll responsibility is to assign a valid pointer to the lpBuffer, Till here it is OK, but once it returns to the Application this lpBuffer becomes NULL. Prototype, __declspec(dllexport) BOOL TRSTMonGetStatus(LPVOID lpBuffer) Please let me know what to do, I am stuck in this. try this __declspec(dllexport) BOOL TRSTMonGetStatus(LPVOID &lpBuffer) AliR. <karunyalakshmi@gmail.com> wrote in message news:1182179607.989434.318540@x35g2000prf.googlegroups.com... > > hi a...

Email address type
Hi All I'm not sure if this is an Exchange or Outlook problem so I submit it here as well. I am trying to send a fax from Word using the shared fax service, the server is a Small Business Server 2003 running Exchange. The Fax Wizard ask for recipient info, I open the address book and I see only a small subset of the recipients who have a FAX number. There is a field called "Email Address Type" which says FAX, and I suspect that those recipients have the email type set to SMTP and that it is the reason why they don't show up, but I'm not sure... Can anyone help please....