TinyMCE에서 제작 한 HTML 본문에 대해 wiki와 비슷한 차이 기능을 개발 중입니다. diff-lcs
은 배열이나 객체를 허용하는 차별화 된 보석입니다. 대부분의 차이점은 코드에 있으며 단지 라인을 비교합니다. HTML을 타는 텍스트의 바디 차이는 더욱 복잡합니다. 텍스트 본문을 꽂으면 문자 비교를 통해 문자를 얻습니다. 결과가 정확할지라도 쓰레기처럼 보일 것입니다.HTML 문자열을 배열로 구문 분석합니다.
seq1 = "<p>Here is a paragraph. A sentence with <strong>bold text</strong>.</p><p>The second paragraph.</p>"
seq2 = seq1.gsub(/[.!?]/, '\0|').split('|')
=> ["<p>Here is a paragraph.", " A sentence with <strong>bold text</strong>.", "</p><p>The second paragraph.", "</p>"]
누군가가 두 번째 단락을 변경하면 차이 출력에는 이전 단락 끝 태그가 포함됩니다. 내가 비교보기에 서식을 유지하고 싶기 때문에 나는 단지 strip_tags
을 사용할 수 없다. 이상적인 비교는 완전한 문장을 기반으로 HTML을 분리 한 것입니다.
seq2.NokogiriMagic
=> ["<p>", "Here is a paragraph.", " A sentence with ", "<strong>", "bold text", "</strong>", ".", "</p>", "<p>", "The second paragraph.", "</p>"]
은 내가 위를 않습니다 발견했습니다 깔끔한 노코 기리 방법 아무것도하지만, 많이 발견했다.
Nokogiri는 XML/HTML을 구문 분석하도록 설계되었으므로 문자열의 배열 인 'seq2'의 시작점은 Nokogiri를 적절하게 사용하지 않습니다. TinyMCE의 전체 출력은 얼마입니까? 루트 요소가 있습니까? –
TinyMCE의 출력은 seq1과 유사합니다. seq2는 중요하지 않습니다. seq3과 같은 형식을 사용하고 싶습니다. 나는 어린이를위한 Nokogiri 객체를 파싱해야 할 것 같고 seq2와 같은 작업을 수행합니다. – Archonic
SAX 인터페이스를 사용하여 모든 태그를 배열에 추가하고 텍스트 노드의 경우 단어를 분할 할 수 있습니다. –