2013-07-24 4 views
-1

해야 할 노드를 선택하지 않습니다. XML에서 USD 환율을 통해 GBP를 얻고 싶습니다. 이XPath는

System.Xml.XPath.XPathDocument path = new System.Xml.XPath.XPathDocument(url); 
System.Xml.XPath.XPathNavigator nav = path.CreateNavigator(); 
System.Xml.XPath.XPathNodeIterator itr = nav.Select("/Envelope/Cube/Cube"); 

여기

<?xml version="1.0" encoding="windows-1252"?> 
<Envelope xmlns="http://www.gesmes.org/xml/2002-08-01"> 

    <Cube xmlns="http://www.bankofengland.co.uk/boeapps/iadb/agg_series" SCODE="XUDLUSS" DESC="Spot exchange rate, US $ into Sterling" COUNTRY="" CONCAT="Not seasonally adjusted # Exchange rates # US dollar # Exchange rate (spot) - US dollar into sterling # US dollar "> 
    <Cube TIME="2013-07-22" OBS_VALUE="1.537" OBS_CONF="N" LAST_UPDATED="2013-07-23 09:30:00"> 
    </Cube> 
    <Cube TIME="2013-07-23" OBS_VALUE="1.5367" OBS_CONF="N" LAST_UPDATED="2013-07-24 09:30:00"> 
    </Cube> 
    </Cube> 
</Envelope> 
+1

지금까지는 좋았습니다. 그것은 무엇을 반환합니까? – Thilo

+0

접두사가있는 네임 스페이스를 추가하고이를 사용해야 할 가능성이 큽니다. –

+0

아무 것도 반환하지 않습니다. Bank of England에서이 XML을 가져오고 변경할 수 없습니다. XPath 표현식을 변경할 수 있습니다. 그렇게하는 방법? – TIKSN

답변

2

는 대부분의 경우 당신은 접두사와 네임 스페이스를 추가하고 XPath는 함께이 접두어를 사용하는 데 필요한 XML에게처럼

코드입니다. 다음을보십시오 : XPathNavigator.Select

그리고 (테스트하지 않은) 이와 비슷한 것을 시도해보십시오.

System.Xml.XPath.XPathDocument path = new System.Xml.XPath.XPathDocument(url); 
System.Xml.XPath.XPathNavigator nav = path.CreateNavigator(); 
XmlNamespaceManager manager = new XmlNamespaceManager(nav.NameTable); 
manager.AddNamespace("e", "http://www.gesmes.org/xml/2002-08-01""); 
manager.AddNamespace("c", "http://www.bankofengland.co.uk/boeapps/iadb/agg_series"); 
System.Xml.XPath.XPathNodeIterator itr = nav.Select("/e:Envelope/c:Cube/c:Cube", manager); 
+0

대단히 감사합니다. 그것은 작동합니다. – TIKSN