定位 گره‌های XML DOM

می‌توان نودها را با استفاده از روابط بین آنها جستجو کرد.

مثال

مثال زیر از فایل XML استفاده می‌کند books.xml.

توابع loadXMLDoc()، که در JavaScript خارجی قرار دارد و برای بارگذاری فایل XML استفاده می‌شود.

دسترسی به نود والد
این مثال از property parentNode برای دریافت گره پدر استفاده می‌کند.
دریافت اولین فرزند گره
این مثال از method firstChild() و یک function تعریف شده برای دریافت اولین فرزند گره استفاده می‌کند.

定位 DOM گره‌ها

با استفاده از روابط بین گره‌ها به گره‌های درخت گره‌ها دسترسی پیدا می‌کنیم، معمولاً به این عمل "定位 گره‌ها" ("navigating nodes") می‌گویند.

در XML DOM، روابط گره‌ها به عنوان properties گره تعریف شده‌اند:

  • parentNode
  • childNodes
  • firstChild
  • lastChild
  • nextSibling
  • previousSibling

تصویر زیر نمایش می‌دهد: books.xml یک بخش از درخت گره‌ها است و روابط گره‌ها را توضیح می‌دهد:

درخت گره DOM

DOM - گره پدر

همه گره‌ها فقط یک گره پدر دارند. کد زیر برای پیدا کردن گره پدر <book> استفاده می‌شود:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("book")[0];
document.write(x.parentNode.nodeName);

توضیح مثال:

  • با استفاده از loadXMLDoc() در "books.xmlبه xmlDoc " بارگذاری شود
  • گره اولین <book> را دریافت کنید
  • نام گره پدر "x" را نمایش دهید

TIY

جلوگیری از گره‌های متن خالی

Firefox و برخی از مرورگرهای دیگر، فضاهای خالی و کارت‌های برشی خالی را به عنوان گره‌های متن در نظر می‌گیرند، در حالی که IE این کار را نمی‌کند.

این ممکن است با استفاده از این properties مشکلی ایجاد کند: firstChild،lastChild،nextSibling،previousSibling.

برای جلوگیری از定位 به گره‌های متن خالی (فضاهای خالی و کارت‌های برشی بین گره‌های عنصر)، ما از یک تابع برای بررسی نوع گره استفاده می‌کنیم:

function get_nextSibling(n)
{
y=n.nextSibling;
while (y.nodeType!=1)
  {
  y=y.nextSibling;
  }
return y;
}

با استفاده از این تابع، می‌توانیم از get_nextSibling(node) به جای property node.nextSibling استفاده کنیم.

توضیح کد:

نوع گره عنصر 1 است. اگر گره‌های هم سطح گره عنصر نیستند، به گره بعدی حرکت کنید تا گره عنصر پیدا شود. با این روش، در IE و Firefox می‌توانید نتایج مشابهی دریافت کنید.

گره اولین را دریافت کنید

کد زیر اولین عنصر گره <book> را نمایش می‌دهد:

<html>
<head>
<script type="text/javascript" src="loadxmldoc.js">
</script>
<script type="text/javascript">
//بررسی کنید که اولین گره یک گره عنصر است
function get_firstChild(n)
{
y=n.firstChild;
while (y.nodeType!=1)
  {
  y=y.nextSibling;
  }
return y;
}
</script>
</head>
<body>
<script type="text/javascript">
xmlDoc=loadXMLDoc("books.xml");
x=get_firstChild(xmlDoc.getElementsByTagName("book")[0]);
document.write(x.nodeName);
</script>
</body>
</html>

خروجی:

title

توضیح مثال:

  • با استفاده از loadXMLDoc() در "books.xmlدر xmlDoc بارگذاری می‌شود
  • در اولین <book> از توابع get_firstChild استفاده می‌شود تا اولین فرزند گره‌ای که در آن قرار دارد را دریافت کند
  • نام گره اولین فرزند (گره‌ای که به عنوان فرزند یک عنصر است) را بیرون می‌دهد

TIY

مثال

در مثال زیر از همان توابع استفاده شده است:

  • firstChild: TIY
  • lastChild: TIY
  • nextSibling: TIY
  • previousSibling: TIY