2016-06-29 3 views
0

API에서 XML 파일을 수신했습니다. XML 파일로받은 Mechanize로 파싱하려고합니다. 그것은 Nokogiri입니다. 무엇이든간에 나는 xpath 변수로 무엇이든 돌려 줄 수는 없다. Nokogiri를 사용하면 Mechanize :: XmlFile이라는 XML 파일이 잘 들어간 것처럼 보이고 요소를 보여줍니다.Mechanize/Nokogiri가 xpath로 XML을 구문 분석하지 못했습니다.

실행할 수 있습니다.

xml.at("/") 

응답을 받지만 다른 .at 또는 .search를 실행하면 nil이 반환됩니다. 예 :

xml.at("//Duration") 

아래에 응답 예가 나와 있습니다.

@body = 
"<JobSearchResults xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://schemas.aspiremediagroup.net/jobboard/1.0/Beta\"><Duration>P0DT0H0M0.328S</Duration><JobCount>0</JobCount><JobIDs /><Jobs /><PageCount>0</PageCount><PageNo>0</PageNo><PageSize>20</PageSize><ProximityStats i:nil=\"true\" /><RoleSuggestions><String>ADDING</String></RoleSuggestions><Search><AccountGroupIDs i:nil=\"true\" /><AccountIDs i:nil=\"true\" /><ExcludeUnknownSalaries>false</ExcludeUnknownSalaries><Industries i:nil=\"true\" /><JobIDsOnly>false</JobIDsOnly><JobTypes><ID>Any</ID></JobTypes><Locations><Location><Country>GBR</Country><ID i:nil=\"true\" /><Latitude i:nil=\"true\" /><Longitude i:nil=\"true\" /><ParentLocation i:nil=\"true\" /><Text i:nil=\"true\" /></Location></Locations><MaxAge i:nil=\"true\" /><MaxDistance>25</MaxDistance><Page>1</Page><PageSize>20</PageSize><Role>adgqeg</Role><Salaries i:nil=\"true\" /><Skills i:nil=\"true\" /><SortOrder>OVERALL_SCORE_DESC</SortOrder></Search><SkillsSuggestions><String i:nil=\"true\" /></SkillsSuggestions><Started>2016-06-29T08:53:18.2215898Z</Started><ThisPageSize>0</ThisPageSize></JobSearchResults>" 

왜 작동하지 않는가?

+0

'doc.at ('검색/')'와'doc.at ('Duration ')'둘 다 나를 위해 작동합니다. 'at '로 정확히 무엇을 찾을 수 없습니까? – mudasobwa

+0

흥미 롭습니다 ... "// Duration"을 (를) 검색하고 아무 것도 얻지 못하고 있지만 올바른 "Duration"이 작동합니다. – Carpela

+0

Mechanize를 사용하여 XML을 구문 분석하고 있습니까? HTML로 작업하도록 설계되었습니다. Nokogiri 만 사용하십시오. 또한 "[mcve]"를 읽으십시오. 문제를 나타내는 XML 입력의 가장 작은 예제와 문제와 예상 출력을 나타내는 최소 코드가 필요합니다. –

답변

0

xml.remove_namespaces! 

수정 문제를 실행하는 것 같다 및 // 스타일 XPath는 변수를 사용하여 문서의 검색을 할 수 있습니다.

거기에는 그보다 나은 해결책이있을 것이라고 생각합니다.

xml.css("Duration") 

하나는 또한 사용할 수 있습니다 :