2014-05-09 1 views
0

비공식 XML 형식을 기반으로 PHP 객체를 비 직렬화 및 직렬화에 대한 통찰력을 제공 할 수 있다면 가장 감사하게 생각합니다. 나는 PHP로 설정할 수 없다. 누구나 쉽게 생각한다면 Perl, Ruby 또는 Java를 기꺼이 사용할 것입니다.PHP (또는 Ruby/Perl/Java의 경우 쉽게 사용자 정의 직렬화/비 직렬화)

내가 예상하는 작업을하고있어 API 그래서 (그것은 도서관 시스템 아니지만,이 예제는 매우 잘 API 설명)처럼 호출하기 :

<request> 
    <method>getBookInfo</method> 
    <elements> 
     <type>bookObject</type> 
     <string>bookTitle</string> 
     <string>2001: A Space Odyssey</string> 
    </elements> 
</request> 

을 그리고 다음과 같은 응답을 제공합니다

<response> 
    <method>getBookInfo</method> 
    <elements> 
     <type>bookObject</type> 
     <string>bookId</string> 
     <string>12345</string> 
     <string>bookTitle</string> 
     <string>2001: A Space Odyssey</string> 
     <string>locations</string> 
     <list> 
      <length>3</length> 
      <string>High St Library</string> 
      <string>Queen St Library</string> 
      <string>Downtown Library</string> 
     </list> 
    </elements> 
</response> 

그것은 <key>value</key> 형식을 사용하는 경우 그것은 간단 것이지만, <string>value</string> 형식 다음에 <string>key</string> 나를 당황 가지고있다.

모든 도움을 주시면 감사하겠습니다.

미리 감사드립니다.

-

편집 - 샘플 PHP 클래스는 너무 오래 코멘트에 대한 가능한 해결책

class Book { 
     var $bookId; 
     var $bookTitle; 
     var $locations = array('location1', 'location 2'); 
} 

답변

0

에게 그렇진 대답을 설명하는 데 도움이 필요하지만 경우.

여기에 갈 수있는 방법은 정확히 무엇을 달성하려고 하는가에 달려 있습니다. 그게 내 말은 대부분 알고리즘이 얼마나 일반적인지를 의미합니다. 항상

<type>someType</type> 

<string>key1</string> 
<string>val1</string> 

또는

<string>key1</string> 
<list> 
    <length>3</length> 
    <string>High St Library</string> 
    <string>Queen St Library</string> 
    <string>Downtown Library</string> 
</list> 

<type> 또는 </elements> 한 또 다른 라인 중 하나와 함께 종료 중 하나의 다음 숫자 인 경우 당신은 몇 가지 기본적인 스크립트를 작성할 수 있습니다 당신이 /<type>.*</을 찾을 때까지 라인을 반복합니다. 그 숫자는 .*입니다 (Perl에서는 /<type>(.*)</) 다음 다음 줄의 첫 번째 키를 찾습니다. 다음 줄의 첫 번째 값 (다음 줄에 <list>이 있으면 그에 따라 처리) 등등. 그러나 형식에 대해 많은 것을 알고 있다고 가정 할 때 우리는 거의 알지 못합니다. 예를 들어 유형, 키 또는 값에 < 또는 >이있을 수 있습니까? 그렇다면 정규식은 더욱 복잡해집니다. 그러나 값이없는 다른 종류의 값이나 키가있을 수 있습니다. 따라서 좀 더 일반적인 것을 필요로한다면 형식에 대해 더 많은 것을 배울 필요가 있습니다.

+0

'. *'를 사용하고 싶다면, 욕심이 없도록하기 위해서'. * '가 필요하다. 그렇지 않으면 _first_ 개구부''부터 _last_ closing 태그까지 모든 것을 하나의 태그로 잡을 것이다. 시합. 또 다른 대안은 '[^ <] *'일 것이고, 그것은'< '문자와 일치하지 않기 때문에 탐욕 문제를 깔끔하게 피할 수 있습니다. –

+1

@DaveSherohman 그래, 나는 각 줄마다 하나의 태그 쌍만 있고 그 유형, 키 및 값에는'< '가 없다고 가정했다. 모든 라인을 개별적으로 매칭한다는 의미였습니다. 다시 말해서 라인을 반복하는 것이 었습니다. – DeVadder

관련 문제