如何从经典asp中的xml字符串中的元素中提取文本
我有以下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> 我想提取ExpirationTimeStamp元素的内容. 这是我的代码的相关部分(是的,我们使用的是jscript而不是vbscript): var xmlDoc = Server.CreateObject("Msxml2.DOMDocument.6.0"); xmlDoc.loadXML(xml); var expNode = xmlDoc.getElementsByTagName("ExpirationTimeStamp"); if (expNode) Response.Write(expNode.text); 我也尝试过selectSingleNode而不是getElementsByTagName 我已经尝试了GetPurchaseContractResponse / GetPurchaseContractResult / PurchaseContract / ExpirationTimeStamp作为xpath字符串,没有,一个和两个前导正斜杠 Response.Write(xmlDoc.xml)输出整个文档,因此加载正常. expNode变量没有得到任何内容. 我对xpath的了解几乎没有,所以我确信那里的一位专家可以指出我正在犯的简单错误. 解决方法
用这个:
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); 其他一些“专家”可能会注意到我在这里作弊.这里使用XPath的主要问题是你的xml指定了一个默认命名空间. XPath始终将“无命名空间”作为其默认命名空间,因此要对此XML使用XPath,您需要首先指定命名空间别名,然后使用它来为XPath中的所有名称添加前缀. 相反,我使用的是MSXML版本3,它默认使用XSL Pattern(不是XPath)作为其选择语言. XSL Pattern忽略名称空间和别名,因此对于简单的场景,它更直接使用. 如果要使用MSXML6,可以使用.setProperty(“SelectionLanguage”,“XSL Pattern”);. 如果你想使用MSXML6和XPath你可以使用.setProperty(“SelectionNamespaces”,xmlns:a =’http://payments.amazon.com/checkout/v2/2010-08-31/’“);然后你的XPath变为:GetPurchaseContractResult / a:PurchaseContract / a:ExpirationTimeStamp. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 在C#中,如何将用户重定向到访问被拒绝的错误asp
- asp.net-mvc – asp.net mvc url action忽略旧参数值
- asp.net-mvc – WebApi Action过滤器调用两次
- asp.net-mvc – NUnit中的MbUnit的行属性?
- asp.net signalR 专题—— 第三篇 如何从外部线程访问 Pers
- asp.net – 获取连接到SignalR hub的客户端数量
- asp.net-mvc – 在.NET MVC 3中使用REST Web服务
- asp.net-mvc – DiggBar如何工作?
- asp.net-mvc-3 – 是否可以在Javascript文件中使用razor语法
- asp.net-mvc – 在asp.net mvc主页面的导航列表中添加“活动