الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أضيف Linebreak داخل Cdata ؟

بدأه Xacker في 6 يناير 2010 · 6 رد · 948 مشاهدة · في منتدى تصميم صفحات الويب
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،

مسألة إضافة LineBreak داخل كتلة CDATA مشكلة معروفة ..

بحثت كثيراً وجربت الحلول العديدة لكنها لم تفدني في شئ ربما لأنها مخصصة بهدف معين.. لا أدري، والصراحة مللت.

ليكن لدينا المثال التالي:

http://www.w3schools...le=cdcatalog_if

وهو أحد الأمثلة من موقع W3schools

في القائمة اليسار لدينا مستند XML

وفي القائمة اليمين لدينا مستند XSL الذي هو template لمستند XML ليظهر الجدول الموجود في أسفل الصفحة..

لنقل أني أردت أن أظهر اسم الألبوم في سطرين (كل كلمة في سطر)، لو كتبت التالي:

<title><![CDATA[Empire 
 Burlesque]]></title>

لن تقوم بفصل الكلمتين كل على سطر.

لنجرب التالي

<title><![CDATA[Empire <br /> Burlesque]]></title>

أيضاً لا فائدة..

احترت صراحة، لن أتوقف عن البحث لكني سأكتب هذا الموضوع لعلي أجد إجابة بأسرع مما أبحث.

مع الشكر سلفاً.

تم تعديل هذه المشاركة بواسطة Xacker في 6 يناير 2010 في 22:54

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#2

هل من أفكار؟

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

السلام عليكم

أنا لا أعرف xml تماما ولكن وجدت شخص يبحث عن ما تبحث عنه و وجد الحل

أنظر هنا

أنظر إلى رد Brian و الملف المرفق وحاول أن تفهم الطريقة

أنا حسب ما فهمته أنه بطريقته يمكن الإنتقال إلى سطر جديد بواسطة \n لكن بعد القيام بتعديلات لم أعرفها لأني لا أعرف xml

حاول، لن تخسر شيءا

بسم الله الذي لا يضر مع اسمه شيء في الأرض و لا في السماء و هو السميع العليم

117tpo4.png
#4

أعتقد أن الحل الوحيد المتوفر لي الآن هو وضع رموز مميزة داخل ملف XML

ومن ثم باستخدام جافاسكربت أقوم بتحويلها قبل عرضها في الصفحة إلى line break..

المشكلة كيف سأقوم بهذا بوجود  XSL parser هو المسؤول عن جلب البيانات وعرضها

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

ماعندي علم عن إللي بتحكي فيه :) بس من باب المحاوله جربت أعمل شي على أساس منطق

عملت داخل العنوان الكلمات بداخل وسم معين كما يلي :

		<title>
<pr>Empire</pr>
 <pr> Burlesque</pr>
</title>

وفي الجهه الأخرى قمت بعمل foreach

    <xsl:for-each select="catalog/cd">
    <xsl:if test="price>10">
      <tr>
        <td>
<xsl:for-each select="title">
1
<xsl:value-of select="pr"/>

</xsl:for-each>
</td>
        <td><xsl:value-of select="artist"/></td>
	    </tr>
    </xsl:if>
    </xsl:for-each>

من ناحيه برمجيه المفروض يزبط !! بس النتيجه

Title Artist

1 Empire Bob Dylan

1 Gary Moore

1 Bee Gees

1 Andrea Bocelli

1 Savage Rose

1 Many

فشو السبب ؟

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#6

أجريت العديد من التجارب دون فائدة حتى وقعت على هذا الموضوع .. ملاحظات سريعة لكنها مفيدة

http://www.xfront.co...cuing-xslt.html

الحل للمشكلة التي تكلمت عنها أخي bastr3 كالتالي:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
 <html>
 <body>
	<h2>My CD Collection</h2>
	<table border="1">
 	<tr bgcolor="#9acd32">
 	<th>Title</th>
 	<th>Artist</th>
	</tr>
	<xsl:for-each select="catalog/cd">
	<xsl:if test="price > 10">
 	<tr>
 	<td>
			<xsl:for-each select="title/pr">
	 <xsl:value-of select="."/> <br />
			</xsl:for-each>
		</td>
 	<td><xsl:value-of select="artist"/></td>
 </tr>
	</xsl:if>
	</xsl:for-each>
	</table>
 </body>
 </html>
</xsl:template>
</xsl:stylesheet>

تم تعديل هذه المشاركة بواسطة Xacker في 13 يناير 2010 في 22:22

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7

وهذا ما قمت به لحل مشكلتي..

محتوى ملف HTML لاستثمار ملف XML + XSL

<html>
<head>
<script>
function loadXMLDoc(dname)
{
if (window.XMLHttpRequest)
 {
 xhttp=new XMLHttpRequest();
 }
else
 {
 xhttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
xhttp.open("GET",dname,false);
xhttp.send("");
return xhttp.responseXML;
}

function displayResult()
{
xml=loadXMLDoc("daemon.xml");
xsl=loadXMLDoc("template.xsl");
// code for IE
if (window.ActiveXObject)
 {
 ex=xml.transformNode(xsl);
 document.getElementById("output").innerHTML=ex;
 }
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
 {
 xsltProcessor=new XSLTProcessor();
 xsltProcessor.importStylesheet(xsl);
 resultDocument=xsltProcessor.transformToFragment(xml,document);
 document.getElementById("output").appendChild(resultDocument);
 var str=document.getElementById("output").innerHTML;
 str=str.replace(/\<\$BR\$\>/gi,"<br>");
 document.getElementById("output").innerHTML=str;
 }
}
</script>
</head>
<body onload="displayResult()">
<div id="output" />
</body>
</html>

والذي يبحث ضمن كود HTML المقدّم من XSL processor عن "<$BR$>" التي أميّز بها الـ line breaks داخل كتلة CDATA ويقوم باستبدالها.

تم تعديل هذه المشاركة بواسطة Xacker في 14 يناير 2010 في 13:07

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

مواضيع مشابهة