2010-03-13 4 views
2

SOAP 메시지가 있습니다 (아래 참조).SOAP 메시지에서 네임 스페이스의 이름을 얻으려면 어떻게해야합니까?

Xpath를 사용하면이 메시지에서 네임 스페이스의 이름을 어떻게 추출 할 수 있습니까? 즉, "validateNewOrder"텍스트를 반환하는 Xpath 루틴이 있습니까?

어떤 제안이나 도움도 도움이 될 수 없습니다. 나는 어디에서나 검색했지만 해결책을 찾지 못했습니다. 그것은 저를 미치게합니다 ...

고마워요!

<?xml version='1.0' encoding='UTF-8'?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<SOAP-ENV:Body> 
    <ns1:validateNewOrder xmlns:ns1="http://sire.rabobank.nl/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
    <sireheader xmlns="http://sire.rabobank.nl/"> 
     <sender> 
     <compid>TEST</compid> 
     </sender> 
    </sireheader> 
    <order xmlns="http://sire.rabobank.nl/"> 
     <account>123456789</account> 
    </order> 
    </ns1:validateNewOrder> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 
+0

는'당신의 예에서 validateNewOrder' 네임 스페이스와 아무 상관이있다, 그것은 요소의 로컬 이름입니다

을 즐길 수 있습니다. 네임 스페이스 URI는'http : // sire.rabobank.nl /'이고 네임 스페이스 접두사는'ns1'입니다. "네임 스페이스 이름"과 같은 것은 없습니다. – skaffman

+0

고마워요 - 그 일이 더 명확하게 시작됩니다! elemen'ts 로컬 이름을 검색하는 방법에 대한 제안 사항이 있습니까? 나는 내 Xpath 쿼리에 대한 쓰기 구문을 얻으려고 내 머리카락을 남기고있다. Olly – olly

+0

안녕하세요 Skaddman. 나는 지금 나의 해결책을 가지고있다. 당신의 도움을 주셔서 감사합니다. olly – olly

답변

1
local-name(/*[local-name() = 'Envelope']/*[local-name() = 'Body']/*[1]) 

네임 스페이스 불가지론 방법으로 Body 아래의 첫 번째 요소의 로컬 이름을 돌려줍니다.

는 (C#을) 나는 사용자 오벨 릭스에 내 솔루션, 감사를

XDocument doc = XDocument.Load(@"XMLFile1.xml"); 
var xpath = "local-name(/*[local-name() = 'Envelope']/*[local-name() = 'Body']/*[1])"; 
var res = doc.Root.XPathEvaluate(xpath); 
+0

안녕하세요, Obalix 고마워요. 귀하의 제안을 시도했지만 구문 오류가 발생했습니다. 그래서 시도해 보았습니다 // * [local-name() = 'Envelope']/* [local-name() = 'Body']/ "TEST123456789"가 아니라 "validateNewOrder"입니다. 내가 뭘 잘못하고 있는지 알아? SOAP에 익숙하지 않아 많은 것들을 오해하고 있습니다. Ps - Xpath 쿼리를 테스트하기 위해 http://www.xmlme.com/XpathTool.aspx 사이트를 사용했습니다. 고마워요! Olly – olly

+0

@olly : 좋습니다, 쿼리에 두 개의 오류가 있었고 오류가 수정되었으며 제공된 코드로 쿼리를 테스트했습니다. 인용 한 사이트는 노드 집합을 반환하는 쿼리 만 처리 할 수 ​​있습니다. 따라서 올바른 요소가 선택되었는지 테스트하려면 외부 'local-name()'을 삭제하고 나머지를 도구에 붙여 넣으십시오. 나는./* [local-name() = 'Envelope']/* [local-name() = 'Body']/* [1]' – AxelEckenberger

+0

안녕하세요. 고마워. 그러나 도구에 붙여 넣으면 도구는 "TEST12345689"를 반환합니다. 이것은 내가 검색하고 싶은 것이 아닙니다. 반환 될 반환 값은 "validateNewOrder"입니다. 아니면 당신의 대답을 오해 했나요? 미안 내 질문에 바보 같다면,하지만 SOAP에 새로운 ... – olly

1

와 함께 테스트. 내가 필요

XPath 쿼리이었다

local-name(/*[local-name() = 'Envelope']/*[local-name() = 'Body']/*[1]) 

그것은 내가 사용 된 테스트 사이트에서 작동하지 않습니다 (분명히, 내가 노드 집합을 반환 할 수 있습니다 만 처리 쿼리를 인용 사이트), 그러나 않습니다 내 Java 코드에서 작동합니다.

지금은 나가서 주말에 올리

+0

@olly : 다른 사람이 제공 한 솔루션을 다시 쓰는 것은 좋지 않은 스타일입니다. 그러나 이며 솔루션을 제공 한 사람을 수락하거나 상향 회신하여 자신의 노력에 대해 보상하는 좋은 스타일입니다. – AxelEckenberger

+0

죄송합니다 Obalix - 전에 이것을 사용하지 않았습니다. 나는 네가 지금 너에게 대답했다고 생각한다. 작동하지 않는다면 알려주세요. 귀하의 답변을 시도하고 홍보 할 계정이 아직 없지만 귀하의 답변을 홍보 할 때 알려드립니다. – olly

관련 문제