2011-08-26 4 views
1

이것은 아마도 간단한 질문 일뿐 xmlhttp를 사용하면이 XML에서 토큰 노드의 텍스트를 어떻게 얻을 수 있습니까?XML 노드에서 텍스트를 가져올 수 없습니다.

XML.FirstChild.NextSibling.FirstChild.FirstChild.FirstChild.FirstChild.NextSibling.Text 

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <GetToken2Response xmlns="webservice"> 
     <GetToken2Result> 
     <ResponseStatus> 
      <ResponseCd>Fail or Success or Warning</ResponseCd> 
      <ResponseMsg>string</ResponseMsg> 
      <Version>string</Version> 
     </ResponseStatus> 
     <Token>string</Token> 
     <Expiration>double</Expiration> 
     <Valid>boolean</Valid> 
     </GetToken2Result> 
    </GetToken2Response> 
    </soap:Body> 
</soap:Envelope> 
+1

야, 당신은 * 꼭 * XPath를 체크 아웃 ...이'.FirstChild.NextSibling.FirstChild.FirstChild.FirstChild ...'사업은 관리하기 어려운 것입니다! –

답변

0

... 실제 샘플 XML의 '의 xmlns = "웹 서비스"'처리하는 방법을 알아낼 수 없습니다,이 절차를 실행하며 내게 준 'string'을 토큰의 값으로 사용하십시오.

Public Sub ReadToken() 
    Dim strUrl As String 
    Dim objDoc As Object 
    Dim strToken As String 

    strUrl = CurrentProject.Path & Chr(92) & "brettville.xml" 

    Set objDoc = CreateObject("Msxml2.DOMDocument.3.0") 
    objDoc.async = False 
    objDoc.validateOnParse = True 
    objDoc.Load strUrl 

    strToken = objDoc.getElementsByTagName("Token").Item(0).Text 
    Debug.Print "strToken: '" & strToken & "'" 
    Set objDoc = Nothing 
End Sub 
1

네임 스페이스를 포함하는 업데이트 : 이것보다 더 좋은 방법이 있어야한다. 불행하게도 내가 파일에 XML을 저장

Sub Test() 
    Dim sXML As String 
    Dim xmlDoc As DOMDocument 
    Dim xNodeResult As IXMLDOMNode 
    Dim xNodeToken As IXMLDOMNode 

    Set xmlDoc = New DOMDocument40 

    sXML = "<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""" & _ 
       " xmlns:xsd = ""http://www.w3.org/2001/XMLSchema""" & _ 
       " xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" & _ 
       "<soap:Body>" & _ 
       "<GetToken2Response>" & _ 
       "<GetToken2Result>" & _ 
       " <ResponseStatus>" & _ 
       "  <ResponseCd>Fail or Success or Warning</ResponseCd>" & _ 
       "  <ResponseMsg>string</ResponseMsg>" & _ 
       "  <Version>string</Version>" & _ 
       " </ResponseStatus>" & _ 
       " <Token>string</Token>" & _ 
       " <Expiration>double</Expiration>" & _ 
       " <Valid>boolean</Valid>" & _ 
       "</GetToken2Result>" & _ 
       "</GetToken2Response>" & _ 
       "</soap:Body>" & _ 
       "</soap:Envelope>" 


    xmlDoc.validateOnParse = True 
    xmlDoc.setProperty "SelectionNamespaces", _ 
       "xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'" 

    xmlDoc.LoadXML (sXML) 
    If xmlDoc.parseError.reason <> "" Then 
     Debug.Print "Parse error: " & xmlDoc.parseError.reason 
     Exit Sub 
    End If 

    xmlDoc.setProperty "SelectionLanguage", "XPath" 

    Set xNodeResult = xmlDoc.DocumentElement.SelectSingleNode(_ 
     "/soap:Envelope/soap:Body/GetToken2Response/GetToken2Result") 
    Debug.Print xNodeResult.XML 

    Set xNodeToken = xNodeResult.SelectSingleNode("Token") 

    If Not xNodeToken Is Nothing Then 
     Debug.Print xNodeToken.nodeTypedValue 
    Else 
     Debug.Print "???" 
    End If 
End Sub 
+0

XPath를 사용해 보았지만 어쩌면 검색 문자열을 잘못 처리하고있을 수도 있습니다. 처음에는/GetToken2Response/GetToken2Result/Token을 시도하고 빈 문자열을 반환합니다. FirstChild.NextSibling 혼란을 사용하여 토큰을 얻을 수 있기 때문에 XML 토큰이 비어 있지 않다는 것을 알고 있습니다. 내 질문에 내 XML에서 내 XPath 선택 문자열이 어떻게 생겼을까요? 감사! – DontFretBrett

+0

샘플이 네임 스페이스 때문에 좀 더 복잡합니다 (지금까지 인식하지 못했던 문제는 내 전문 분야가 아니기 때문에 ...) "일종의" 예외 인 "webservice"네임 스페이스 예외 ... 업데이트 된 답변보기. –

관련 문제