2012-07-19 6 views
4

나는 다음과 같은 XML이 :기존 ASP에서 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 요소의 내용을 추출 할를. 내가 대신 내가 시도

getElementsByTagName

의 selectSingleNode을 시도

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

GetPurchaseContractResponse/GetPurchaseContractResult/: 여기

은 (예, JScript를하지 VBScript를를 사용하는) 내 코드의 관련 부분입니다 PurchaseContract/ExpirationTimeStamp는 xpath 문자열로 none, 하나 및 두 개의 선행 슬래시를 사용합니다.

Response.Write (xmlDoc.xml)는 전체 문서를 출력하므로 정상적으로로드됩니다.

expNode 변수에는 아무 것도 입력되지 않습니다.

내 xpath에 대한 지식은 아무 것도없는 것이므로 일부 전문 가가 내가 작성한 간단한 실수를 지적 할 수 있습니다.

답변

7

사용이 :

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의 모든 이름 앞에 접두사를 사용해야합니다.

대신 XSL 패턴 (XPath 아님)을 선택 언어로 사용하는 MSXML 버전 3을 사용하고 있습니다. XSL 패턴은 네임 스페이스와 별칭을 무시하므로 단순한 시나리오에서는 사용하기가 더 간단합니다.

MSXML6을 사용하려는 경우 .setProperty("SelectionLanguage", "XSL Pattern");을 사용할 수 있습니다.

.setProperty("SelectionNamespaces", xmlns:a='http://payments.amazon.com/checkout/v2/2010-08-31/'");을 사용할 수있는 MSXML6 및 XPath를 사용하려는 경우 XPath는 a:GetPurchaseContractResult/a:PurchaseContract/a:ExpirationTimeStamp이됩니다.

+0

모든 옵션 - 우수 답변 - 감사합니다. – Graham