加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

如何从经典asp中的xml字符串中的元素中提取文本

发布时间:2020-12-16 06:31:25 所属栏目:asp.Net 来源:网络整理
导读:我有以下xml: GetPurchaseContractResponse xmlns="http://payments.amazon.com/checkout/v2/2010-08-31/" GetPurchaseContractResult PurchaseContract Idamzn1.contract.1.1.1.d6779be6bf481167fe945/Id StateACTIVE/State MerchantIdXXXXXXXXXX/Merchant
我有以下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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读