PHP, XSLT ile HTML, XML CDATA içine kodlanmış HTML yapar

2 Cevap php

Ben gerçekten bu soruya bir cevap gerekiyor. Ben bir web sayfası üretmek için XSLT sonra, sayfaları yapmak için XML kullanan bir proje üzerinde çalışıyorum. Burada bir kod örneği:

 public function transform ($xml) {
  $proc = new XSLTProcessor;
  $proc->importStyleSheet ($this->xsl);
  $output = $proc->transformToXML ($xml);
  return $output;
 }

$ xml örneğin XML biçiminde web sayfası içerir:

<?xml version="1.0" encoding="utf-8"?>
<page>
 <meta>
  <language>en</language>
  <title>Main page</title>

 <content>
<![CDATA[
  lot's of content here along with <p>html</p>.
]]>
 </content>

</page>

Yani, web sayfası XML ve HTML web sayfasına XML dönüştürmek için bir XSL dosyası yükler dönüştürmek işlevi geçti. Ancak, yukarıdaki komut nedense XSLT CDATA anlamıyor çünkü, düzgün bir içerik etiketi yüklemek için başarısız, ve kuruluşlara HTML kodlar olacaktır.

Yani, soru onu almadan HTML olarak HTML, XSLT kullanarak, nasıl çıkış yapabilirim, varlıkları içine kodlanmış olduğunu?

2 Cevap

Ben size XSLT'de böyle bir şey yok eminim:

<xsl:template match="content">
  <xsl:value-of select="." disable-output-escaping="yes" />
</xsl:template>

XSLT gayet iyi CDATA "anlar". Daha doğrusu - bu tüm CDATA'da ile ilgili değildir, bu bunun dışında bir metin değer kılan temel XML DOM çözümleyici bir iştir.

Bakış bir XSLT noktadan itibaren, bilmenin bir yolu olup olmadığını dize

"<div>bla &amp; bla</div>"

çıktı

<xml>&lt;div&gt;bla &amp;amp; bla&lt;/div&gt;</div>

veya

<xml><![CDATA[<div>bla &amp; bla</div>]]></div>

CDATA is merely a serialization convenience. The resulting info set/DOM is the same. And unless you disable output escaping, XSLT cveyarectly produces the following value from the above string:

&lt;div&gt;bla &amp;amp; bla&lt;/div&gt;

Which is the reason fveya the fact that you see HTML code on the rendered page.

this yardımcı olmadığını görmek. Ben cevap daha buraya koymak istiyorum ama bağlantı XSLT ve Saxon tarafından kullanılan standart XMLReader için bir sarıcı LexEv XMLReader kullanarak XSLT'den böyle bir dönüşümü sonuca ulaşmak için nasıl açıklayan iyi bir iş yapar bence.