2013-02-28 6 views
7

डालता है मैं PHP टिडी का उपयोग करना चाहता हूं ताकि यह सुनिश्चित किया जा सके कि मेरा xml एक डोम डॉक्यूमेंट में लोड करने से पहले मान्य है।PHP टिडी व्हाइटस्पेस को हटा देता है और न्यूलाइन

हालांकि, मैं नहीं है साफ चाहते हैं मेरी स्वरूपण के लिए कुछ परिवर्तन करने के लिए - मैं सिर्फ यह असंतुलित टैग जैसी समस्याओं की मरम्मत के लिए चाहते हैं, आदि

समस्या का एक उदाहरण यह पेज पर देखा जा सकता: http://www.tek-tips.com/viewthread.cfm?qid=1654452

मेरा अपना उदाहरण निम्नलिखित है।

इनपुट: <ex><context>собр<stress>а</stress>ние</context> акцион<stress>е</stress>ров — <stress>aa</stress>ndeelhoudersvergadering</ex> (जो मान्य XML पहले से ही है)

अपेक्षित उत्पादन: <ex><context>собр<stress>а</stress>ние</context> акцион<stress>е</stress>ров — <stress>aa</stress>ndeelhoudersvergadering</ex>

वास्तविक उत्पादन (वहाँ </context> और актион के बीच तोड़ने खाली स्थान के है):

<ex> 
<context>собр 
<stress>а</stress>ние</context>акцион 
<stress>е</stress>ров — 
<stress>aa</stress>ndeelhoudersvergadering</ex> 

(इसे हटा दिया </context> और актион के बीच की जगह जो टेक्स्ट को अपठनीय बना देगी, और इसमें नया डाला गया प्रत्येक टैग के बाद लाइनों)

मेरे कोड है:

function TidyXml($inputXml) 
    { 
     $config = array(
      'indent'   => false, 
      'output-xml'  => true, 
      'input-xml'  => true, 
     ); 

     $tidy = new tidy(); 
     $tidy->parseString($inputXml, $config, 'utf8'); 
     $tidy->cleanRepair(); 
     $cleanXml = tidy_get_output($tidy); 
     return $cleanXml; 
    } 

मैं कई विकल्प को बदलने की कोशिश की, लेकिन कामयाब नहीं हुए।

+0

http जोड़ने से साफ को रोकने के लिए एचटीएमएल पर की जगह को चलाने के लिए सक्षम था। sourceforge.net/docs/quickref.html#output-xml – hakre

+0

PHP सरल HTML डोम पार्सर सबसे अधिक से अधिक उदार पार्सर है। http://simplehtmldom.sourceforge.net/ – Petah

+0

@ hakre मैंने 'input-xml '=> true' को छोड़कर सभी सेटिंग्स को हटा दिया (आवश्यक है क्योंकि अन्यथा यह एक पूर्ण HTML दस्तावेज़ आउटपुट करेगा)। हालांकि, यह मदद नहीं की। इसके अलावा मैंने 'output-xml' => false' सेट करने का प्रयास किया, लेकिन इससे मदद नहीं मिली। स्ट्रिपिंग/ट्रिमिंग और स्वरूपण को रोकने के लिए कुछ भी किया जा सकता है? –

उत्तर

2

मुझे एक समाधान मिला, लेकिन यह थोड़ा हैकिश है, इसलिए मैं अभी भी बेहतर सुझावों के लिए खुला हूं।

एक्सएमएल आप मान्य करने के लिए चाहते हैं के आसपास <pre> रखो (इस खाली स्थान के बदलने के लिए नहीं साफ निर्देश देता है), तो, के साथ उत्पादन-एचटीएमएल सही पर सेट एक्सएमएल की मरम्मत तो <pre> और \n नई-पंक्तियों को हटा दें।

उदाहरण: // साफ:

$config = array(
    'indent' => false, 
    'indent-attributes' => false, 
    'output-html' => true, 
    'input-xml' => true, 
    'wrap' => 0, 
    'vertical-space' => false, 
    'new-inline-tags' => 'context,abr,stress', 
    'new-blocklevel-tags' => 'def,ex,examples' 
); 

$tidy = new tidy(); 
$inputXml = "<pre>" . $inputXml . "</pre>"; 
$validXml = $tidy->repairString($inputXml, $config, 'utf8'); 
$cleanXml = str_replace("\n", "", $validXml); 
$cleanXml = substr($cleanXml, strlen("<pre>"), strlen($cleanXml)); 
$cleanXml = substr($cleanXml, 0, strlen($cleanXml)-strlen("</pre>")); 
0

मेरे मामले में, मैं एक बहु खाली लाइनों को हटाने और टूट जाता है $html = preg_replace("/\n([\s]*)\n/", "\r\n", $html);

संबंधित मुद्दे