A-AA+then

ขออนุญาตถามปัญหา xml ครับ

1,328
ตอนนี้ผมมีปัญหาเกี่ยวกับการดึง xml ของเว็บชาวบ้านมาใช้งานครับ ปัญหามีอยู่ว่า สมมุตินะครับ

 <?xml version="1.0" encoding="utf-8" ?>
<root>
  <inside>ข้อมูลที่1</inside>
</root>
<root>
 </inside>   <----------- ตัวปัญหาครับ
</root>
<root>
  <inside>ข้อมูลที่3</inside>
</root>

ส่วนตอนเรียกข้อมูลก็ทำปกตินะครับ ขออนุญาตเขียนลัดนิดหน่อยนครับ ประเดนคือผมจะดึงข้อมูลใน node <inside> ทั้งหมดนะครับก็วนลูปธรรมดาแบบนี้

for (var i = 0; i < 3; i++)
if(   )  <----------- จะเขียนเงื่อนไขอะไรดักไว้ได้บ้างครับ
variable=xml.getElementsByTagName('inside').childNodes[0].nodeValue
else
variable="";



ปัญหาอยู่ตรงนี้และครับ พอในลูปที่สองที่ต้องไปดึงข้อมูลในแท็กที่ผมเขียน error ไว้ พอรันบน ie มัน error เลยครับ คือประมาณว่าไม่สามารถแสดงข้อมูลทั้งหมดได้เลยครับ ถ้าจะให้ผมไปแก้ไฟล์ xml ก็ไม่ได้อีกมันเป็นของชาวบ้านครับ ผมก็เลยมีคำถามอยู่ว่า ผมสามารถเขียนเงื่อนไข [ if() ] หรืออะไรก็ตามแต่ดักได้มั้ยครับว่า ถ้า node ไหนไม่ครบหรือไม่สมบูรณ์ให้ตัวแปรเก็บค่าว่างปล่าวไว้แล้วไปทำลูปต่อไปเลย คือประเดนคือผมไม่รู้จะเขียนเงื่อนไขดัก error ตรงนี้ยังไงและครับ ใครทราบช่วยชี้แนะด้วยเถิอครับ ขอบพระคุณมากครับ

4 ความคิดเห็น

ก็คงไม่แปลกละครับ สำหรับการใช้ฟังก์ชั่นตามมาตรฐานบราวเซอร์ เมื่อใดที่ XML ไม่ถูกต้อง ฟังก์ชั่นย่อมอ่านค่าไม่ได้ มีตัวเลือก 2 ตัวที่เป็นไปได้

1. ถ้า XML เป็นของตัว้เอง ทางเลือกที่ดีที่สุดคือทำให้มันถูกต้องซะ Javascript มันก็จะทำงานได้เอง

2. ถ้า XML นำมาจากที่อื่น หลีกเลี่ยงได้ก็ควรหลีกครับ จะเป็นปัญหาเปล่าๆ แต่ถ้ายังจำเป็นต้องใช้ ก็คงต้อง เขียนฟังก์ชั่นเพื่ออ่านค่าด้วยตัวเองครับ ถ้าบน Javascript ก็ลองใช้ฟังก์ชั่นเกี่ยวกับ STring  เพื่อแยกค่าออกด้วยตัวเอง เช่นฟังก์ชั่นเกี่ยวกับ RegEXP หรือถ้าเป็นไปได้ ก็หันมาอ่าน XML ด้วย PHP+Ajax ครับ ตัวอย่างที่พอดัดแปลงได้ก็ RSS Ajax ครับ
1

แบบนี้ได้หรือป่าวครับ แล้วถ้าเราเอา nextSibling เข้ามาช่วยเช็ค node ได้หรือป่าวครับ ประมาณว่า  ชี้ไปที่ node ก่อนถึงตัว node ที่มีปัญหา แล้วเช็คว่า มี node <inside> ใน node ถัดไปหรือไม่ ถ้ามีก็รับค่า ถ้าไม่มีก็ข้ามการทำงานของ node นี้ไป อะไร ประมาณนี้ แต่ผมเขียน เงื่อนไขการใช้ nextSibling ไม่เป็นครับ ปกติไม่เคยใช้ตัวนี้เลยครับ รบกวนชี้แนะด้วยครับ
2

ลองสิครับ

แต่โดยทั่วไปแล้ว XML ที่ไม่ถูกต้อง มันก็น่าจะอ่านไม่ได้ครับ... หรืออ่านได้ก็แค่บาง Browser
3

ลองเปลี่ยนวิธีวนลูปไปใช้ do..while ดูครับ อาจจะได้

4
^