با سلام خدمت کاربران گرامی سایت پی وی لرن و علاقمندان و کاربرانی که علاقمند به یادگیری دوره XML هستند. در جلسه گذشته با لیست گره ها آشنا شدیم و کار با آن ها را فراگرفتیم. در ادامه فصل DOM و کار با گره ها، آموزش جا به جایی در گره ها در DOM را ارائه می نماییم.
جا به جایی یا Traversing در گره ها به این معناست که بتوان از قابلیت Loop استفاده کرد و یا از میان ذرخت گره ها node tree جا به جا شد.
گاهی پیش می آید که قصد Loop نمودن یک سند XML را دارید؛ برای مثال زمانی که قصد استخراج ارزش هر عنصر را دارید؛ به این فرآیند “Traversing the node tree” یا جا به جایی در درخت گره گفته می شود.
در مثال زیر Loops ها در یک گره child از عنصر <book> و نیز نام ها و مقادیر نمایش داده شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <!DOCTYPE html> <html> <body> <p id="demo"></p> <script> var x, i ,xmlDoc; var txt = ""; var text = "<book>" + "<title>Everyday Italian</title>" + "<author>Giada De Laurentiis</author>" + "<year>2005</year>" + "</book>"; parser = new DOMParser(); xmlDoc = parser.parseFromString(text,"text/xml"); // documentElement always represents the root node x = xmlDoc.documentElement.childNodes; for (i = 0; i < x.length ;i++) { txt += x[i].nodeName + ": " + x[i].childNodes[0].nodeValue + "<br>"; } document.getElementById("demo").innerHTML = txt; </script> </body> </html |
خروجی :
1 2 3 | title: Everyday Italian author: Giada De Laurentiis year: 2005 |
۱٫فرض کنيد “books.xml” را به xmlDoc بارگذاري کرده ايد.
۲٫ گره های child عنصر ریشه را دریافت می کند.
۳٫ برای هر گره child ، خروجی نام گره و مقدار گره از text node به عنوان خروجی در نظر گرفته شده اند.
همه مرورگرهای مدرن از مشخصات W3C DOM پشتیبانی می کنند.
با این حال، بین مرورگرها تفاوت هایی وجود دارد. یک تفاوت مهم این است: نحوه برخورد با فضاهای سفید و خطوط جدید!
XML اغلب حاوی خط جدید new line یا علامت فضای سفید white space در بین گره است.
این اتفاق اغلب شامل مواردی می شود که سند توسط یک ویرایشگر ساده مثل Notepad ویرایش می شود.
مثال زیر (ویرایش توسط Notepad) شامل CR / LF (خط جدید) بین هر خط و دو فاصله در مقابل هر گره child است:
1 2 3 4 5 6 | <book> <title>Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> |
اینترنت اکسپلورر ۹ و قبل از آن، فضاهای سفید و یا خطوط جدید را به عنوان گره های متنی را در نظر نمی گیرند، در حالی که مرورگرهای دیگر این کار را انجام می دهند.
مثال زیر تعداد گره های child را که عنصر ریشه (از books.xml) دارد را به عنوان خروجی تعیین می نماید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <bookstore> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="web"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> <book category="web" cover="paperback"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore> |
IE9 و نسخه های قبلی آن تنها چهار گره child تعیین می کنند در حالی که IE10 و نسخه های بالاتر و سایر مرورگرها ۹ گره child را ایجاد می نمایند.
1 2 3 4 5 6 | function myFunction(xml) { var xmlDoc = xml.responseXML; x = xmlDoc.documentElement.childNodes; document.getElementById("demo").innerHTML = "Number of child nodes: " + x.length; } |
تجزیه کننده XML معمولا تمام متن را در یک سند XML تجزیه می کند.
هنگامی که یک عنصر XML تجزیه می شود، متن بین تگ های XML نیز تجزیه می شود:
1 | <message>This text is also parsed</message> |
تجزیه کننده این کار را انجام می دهد، زیرا عناصر XML می توانند شامل عناصر دیگر باشند، همانطور که در این مثال، که عنصر <name> شامل دو عنصر دیگر (اول و آخر) است:
1 | <name><first>Bill</first><last>Gates</last></name> |
و تجزیه کننده آن را به زیر عناصر مانند زیر تقسیم می کند:
1 2 3 4 | <name> <first>Bill</first> <last>Gates</last> </name> |
کاراکترهای داده تجزیه شده یا (PCDATA) یک اصطلاح مورد استفاده در مورد داده های متنی است که توسط تجزیه کننده XML پردازش شده است.
اصطلاح CDATA در مورد داده های متن مورد استفاده قرار می گیرد که نباید تجزیه کننده XML آن را تجزیه کند.
شخصیت هایی مانند “<” و “&” در عناصر XML غیرقانونی هستند.
“<” یک خطا ایجاد می کند، زیرا تجزیه کننده آن را به عنوان یک عنصر جدید تفسیر می کند.
“&” یک خطا ایجاد می کند، زیرا تجزیه کننده آن را به عنوان آغاز یک موجودیت یک کاراکتر تفسیر می کند.
برخی از متنها، مانند کد جاوا اسکریپت، شامل بسیاری از کاراکترهای “<” یا “&” هستند.
برای جلوگیری از خطا کد اسکریپت می تواند به عنوان CDATA تعریف شود.
همه چیز در بخش CDATA توسط تجزیه کننده نادیده گرفته می شود.
بخش CDATA با “<![CDATA[” and ends with “]]>” شروع می شود:
1 2 3 4 5 6 7 8 9 10 11 | <script> <![CDATA[ function matchwo(a,b) { if (a < b && a < 0) { return 1; } else { return 0; } } ]]> </script> |
در مثال بالا، همه چیز در بخش CDATA توسط تجزیه کننده نادیده گرفته می شود.
آموزش جا به جایی در گره ها در DOM را با بخش یادداشت ها در بخش CDATA به پایان می بریم.
بخش CDATA نمی تواند شامل رشته “<[[” باشد.
بخش Nested CDATA را نیز نمی توان استفاده کرد.
“<[[” که پایان بخش CDATA را نشان می دهد نمی تواند شامل فضاها spaces و یا خطوط line breaks شکسته شود.
در طی این جلسه با آموزش جا به جایی در گره ها در DOM همراه شما بودیم.
در جلسه بعدی شما را به آموزش Navigating Nodes یا نحوه راهبری و هدایت گره ها دعوت می نماییم.
با پی وی لرن همراه باشید.