How to extract text from an element in an xml string in classic asp

I have the following xml:

<GetPurchaseContractResponse xmlns="http://payments.amazon.com/checkout/v2/2010-08-31/"> <GetPurchaseContractResult> <PurchaseContract> <Id>amzn1.contract.1.1.1.d6779be6bf481167fe945</Id> <State>ACTIVE</State> <MerchantId>XXXXXXXXXX</MerchantId> <ExpirationTimeStamp>2012-07-19T10:55:28.134Z</ExpirationTimeStamp> <MarketplaceId>A1SDFERWERSDF</MarketplaceId> </PurchaseContract> </GetPurchaseContractResult> <ResponseMetadata> <RequestId>0db53477-d17a-11e1-ac3e-fd3e0de62222</RequestId> </ResponseMetadata> </GetPurchaseContractResponse> 

I want to extract the contents of an ExpirationTimeStamp element.

Here is the corresponding snippet of my code (yes, we use jscript, not vbscript):

 var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.6.0"); xmlDoc.loadXML(xml); var expNode = xmlDoc.getElementsByTagName("ExpirationTimeStamp"); if (expNode) Response.Write(expNode.text); 

I also tried selectSingleNode instead of getElementsByTagName

I tried GetPurchaseContractResponse / GetPurchaseContractResult / PurchaseContract / ExpirationTimeStamp as an xpath string without a draw, one or two leading slashes

Response.Write (xmlDoc.xml) outputs the entire document, so it loads fine.

The variable expNode does not receive anything.

My knowledge of xpath costs almost nothing, so I’m sure that some expert can point out a simple error that I am making.

+4
source share
1 answer

Use this:

 var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.3.0"); xmlDoc.loadXML(xml); var expNode = xmlDoc.documentElement.selectSingleNode("GetPurchaseContractResult/PurchaseContract/ExpirationTimeStamp"); if (expNode) Response.Write(expNode.text); 

Some other “experts” may notice that I am cheating here. The main problem with using XPath here is that your xml indicates the default namespace. XPath always has “no namespace” as the default namespace, so to use XPath with respect to this XML, you will need to first specify a namespace alias and then use it to prefix all names in XPath.

Instead, I use version 3 of MSXML, which by default uses the XSL template (not XPath) as the language of its choice. The XSL template ignores namespaces and aliases, so it’s easier to use for a simple script.

If you want to use MSXML6, you can use .setProperty("SelectionLanguage", "XSL Pattern"); .

If you want to use MSXML6 and XPath, you can use .setProperty("SelectionNamespaces", xmlns:a='http://payments.amazon.com/checkout/v2/2010-08-31/'"); then your XPath will become a:GetPurchaseContractResult/a:PurchaseContract/a:ExpirationTimeStamp .

+7
source

All Articles