2010-06-02 3 views
1

현재 XML 구문 분석을하고 있는데 사용하기 쉽고 구문이 쉽기 때문에 Hpricot을 사용하기로했습니다. 그러나 몇 가지 문제가 있습니다. 내가 찾은 XML 데이터를 다른 파일에 작성해야합니다. 그러나 이렇게하면 형식이 보존되지 않습니다. 예를 들어 내용이 다음과 같이 표시되어야하는 경우 :Ruby - 파일에 Hpricot 데이터 쓰기

<dict> 
    <key>item1</key><value>12345</value> 
    <key>item2</key><value>67890</value> 
    <key>item3</key><value>23456</value> 
</dict> 

그리고이 문서에는 많은 항목이 있다고 가정합니다. 나는 위의 코드를 사용하면

hpricot_element = Hpricot(xml_document_body) 
f = File.new('some_new_file.xml') 
(hpricot_element/:dict).each { |dict| f.write(dict.to_original_html) } 


를 사용하여 'DICT'항목을 통해 반복하고, 나는 기대 같은 출력 모양 정확히 위의 XML과 같이 다음과 같습니다. 그러나 놀랍게도, 파일의 출력은 더 다음과 같습니다 : 나는 "\ n을"문자로 분할을 시도하고 한 번에 파일 한 줄에 작성했습니다

<dict>\n", " <key>item1</key><value>12345</value>\n", " <key>item2</key><value>67890</value>\n", " <key>item3</key><value>23456</value\n", " </dict> 


, 하지만 그것은 "\ n"문자를 인식하지 못하기 때문에 작동하지 않는 것 같습니다. 어떤 도움이라도 대단히 감사합니다. 그것은 아주 간단한 해결책일지도 모르지만, 나는 그것을 찾는 데 문제가 있습니다. 감사!

답변

0

내 솔루션은 줄 바꿈 문자 그대로'\ n '은 문자를 대체하고 간단하게 다음과 같은 모습이 gsubs을 추가하여 여분의 구두점을 제거하는 것이 었습니다 왜 내가 전에 이것을 보지 못했는지 안다. 내가 말했듯이, 그것은 내가 보지 못했던 쉬운 대답일지도 모릅니다. 모든 해답을 가져 주셔서 감사합니다!

0
hpricot_element = Hpricot::XML(xml_document_body) 

File.open('some_new_file.xml', 'w') {|f| f.write xml_document_body } 

원본 xml을 쓰려면 xml 파서를 사용하지 마십시오. 불필요합니다. 그래도 데이터를 추가로 처리하려면 계속 사용해야합니다.

또한 XML의 경우 Hpricot 대신 Hpricot::XML을 사용해야합니다.

f.write(dict.to_original_html.gsub('\n', "\n").gsub('" ,"', '')) 


내가 돈 '

+0

슬픈 부분은 내 원래의 질문에,이 XML 데이터를 얻기 위해 많은 XML 구문 분석과 검색이 필요하다는 것입니다. 그래서 XML 파서는 필자가 특별한 시간을 보내지 않으려는 경우에 필요했다. 내가 작업하고있는 XML 파일은 매우 불쾌하고 (거의 전체적으로 의미가 적음) 매우 커서 따라서 나중에 분석을 위해 파일의 섹션을 조각 파일로 추출해야한다. 따라서 XML 구문 분석 기능이 필요하지만 파일에 다시 쓰는 기능이 필요합니다. –

+0

실제로 원래 코드를 유지하고 쓰기를 변경했습니다. f.write (dict.to_original_html.gsub ('\ n', "\ n") .gsub (' ","', '')) 그리고 완벽하게 작동했습니다. \ n 리터럴을 실제 줄 바꿈으로 바꾸고 불필요한 구두점을 제거하십시오. –