شناسایی تگ ها در رشته ها

30noohe

Member
با سلام
من می خوام با آژاکس وقتی که فایلی رو که حاوی تگ های زیادی هست رو می خونم بتونم هر تگ رو جدا گونه شناسایی کنم!!!
به عبارت دیگه بتونم در HTTPR.responseText تگ ها رو شناسایی کنم و هر چیزی رو که بین تگ <id> هست رو در یک متغیر قرار بدم.


خداییش حتما به این سوال جواب بدید.
 

30noohe

Member
بین این روش رو نمی خوام!!!
فرض کن توی متغیر زیر
کد:
str='<id>SALAM<</id>';
بخوای عبارت SALAM رو در یه متغیر قرار بدی!!! نمی خوام xml رو parse کنی بر اساس اندیس بلکه می خوام بر اساس نام تگ parse کنیم!!!
یه روش به ذهنم اومده ولی یکم طولانی هست ::: اول هر چی هست رو توی صفحه چاپ کنیم بعد از طرق جاوااسکریپت به راحتی هر تگی رو که خواستیم از توش جدا کنیم!!
 

peyman1987

Member
يه راه ديگه ش اينه که خودت بشيني و يه پارسر با جاوااسکريپت بنويسي.
البته يه مقدار دنگ و فنگ داره. ولي زيادم سخت نيست. اگه هيچکدوم از تگهات property ندارن و همه شون تگهاي ساده هستن کار زيادي نداره مثلا:

HTML:
<HTML>
<HEAD>
	<SCRIPT>
		function myParser(strTagName,strFullText)
		{
			var strStartTag = "<"+strTagName+">";
			var strEndTag = "</"+strTagName+">";
			var intTextEnd = strFullText.indexOf(strEndTag);
			strFullText = strFullText.substr(strStartTag.length);
			strFullText = strFullText.substr(0,strFullText.length - (strEndTag.length));
			return strFullText;
		}
	</SCRIPT>
</HEAD>
<BODY onload="document.getElementById('test').innerText=myParser('id','<id>SALAM</id>');">
	<SPAN ID="test">
	</SPAN>
</BODY>
</HTML>
 

30noohe

Member
خوب این اسکریپتتون یه مشکل داره اونم اینه که اگه 2تا تگ داشته باشیم دچار مشکل میشیم.
من خودم با قواعد منظم با php چنین چیزی رو ساختم (کاملا دقیق ) ولی نمیدونم قواعد منظم توی جاوا اسکریپت به چه شکلی هست و آیا به پیشرفتگی php هست یا نه؟؟؟
 

peyman1987

Member
درسته دوست من کد من فقط براي تگهاي ساده کار ميکنه ولي اين فقط يه مثال براي الگوريتم کار بود.
ميشه با عبارات با قاعده هم اينکار رو انجام داد. جاوااسکريپت هم از عبارات با قاعده پشتيباني ميکنه ولي نه به قدرت Php.
تگه ممکنه عبارتي که با Php‌نوشتين رو بزارين شايد بشه با جاوااسکريپت پياده ش کرد.
 

30noohe

Member
کد:
function betweentag($str,$start,$end)
{
	$start_reg='/\<'.$start.'/';
	$end_reg='/\<\/'.$end.'(.*?)\>/';
	preg_match_all($start_reg,$str,$starts,PREG_OFFSET_CAPTURE);
	preg_match_all($end_reg,$str,$ends,PREG_OFFSET_CAPTURE);
	$c=count($starts[0]);
	for($i=0;$i<$c;$i++)
	{
		$pos_s[$i]=$starts[0][$i][1];
		$sub[$i]=substr($str,$pos_s[$i]);
		preg_match_all('/\>/',$sub[$i],$match,PREG_OFFSET_CAPTURE);
		$pos[$i]=$match[0][0][1];
		$start_pos[$i]=$pos[$i]+$pos_s[$i]+1;
	}
	$c_end=count($ends[0]);
	for($i=0;$i<$c_end;$i++)
		$end_n[$i]=$ends[0][$i][1];
	if($c_end==$c)
	{
		for($i=0;$i<$c;$i++)
			$return[$i]=substr($str,$start_pos[$i],$end_n[$i]-$start_pos[$i]);
		return $return;
	}else 
		return false;
}
ببین یکم تحقیق کردم و فهمیدم با HTTPRequest.responseXML میشه مشکل من رو حل کرد ولی وقتی از این استفاده می کنم مقدار null رو برمی گردونه!! مشکل چیه؟؟
 

peyman1987

Member
خوب اين همون روشيه که من اول گفتم ديگه. ولي توجه کن از اين متد توي ايجکس استفاده ميشه و براي کدهاي معمولي کاربرد نداره. اين زماني مقداردهي ميشه که شما قبلش مقدار رو فرستاده باشي به فايل سرورت و اون مقدار رو برگردونده باشه اينجوري اين مقدار ميگيره وگرنه در حالت عادي مقدار نداره.

درباره کدت هم الان ديگه ديره فردا يه نگاهي ميکنم ببينم ميشه با جاوااسکريپت کاريش کرد يا نه.
 

30noohe

Member
میشه بیشتر توضیح بدی؟؟
آخه این یعنی چی؟؟ "اين زماني مقداردهي ميشه که شما قبلش مقدار رو فرستاده باشي به فايل سرورت و اون مقدار رو برگردونده باشه"
تشخیص تگ ها رو هم برای آژاکس می خوام!!
 

30noohe

Member
من مشکلم حل شد(با responseXML)
فقط یه چیزی:
فرض کن کد زیر توی یک فایلی هست. و تو با جاوا اسکریپت می خوای اون رو بخونی و هر چی بین تگ id هست رو در یه متغیر قرار بدی. اگه میشه بگو چطوری کل محتوات تگ id رو نمایش بدم؟؟
کد:
<?php 
header('Content-Type:text/xml');
?>
<id>

	salam
	<a herf="xx">sas</a>
</id>
چرا وقتی از httpR.responseXML.getElementsByTagName('id')[0].childNodes[0].nodeValue
استفاده می کنم تگ a رو تحت پوشش قرار نمیده؟؟ به عبارت دیگه در این جا به جای innerHTML چه چیزی رو میشه استفاده کرد؟؟
 

جدیدترین ارسال ها

بالا