2014-10-17 3 views
0

Я пытаюсь вытащить текстовое значение узлов <point> в свой XML-файл widgets.xml.textContent, возвращающий нежелательные пустые текстовые значения в итерации JavaScript XML

Мне удастся получить текст, однако я также получаю нежелательные пустые текстовые значения между каждой итерацией в моем цикле for. После тщательной отладки, похоже, что проблема начинается прямо, когда в нижней части моего файла JavaScript вызывается lines[i].childNodes[j].textContent.

В моем отладчике в Chrome, кажется, что первое значение, которое оно держит в points[0][0], - это маленькая стрелка, которая идет вниз и влево, аналогично той, которую вы найдете на клавише Return на клавиатуре.

Я некоторое время занимался этим, но я не могу понять, что случилось.

Что именно textContent делает во время итерации?

Вот код:


XML

<?xml version="1.0" encoding="UTF-8"?> 


<user> 
    <widgets> 
     <widget id="00" status="on"> 
      <name>Bookings</name> 
      <phpfile>booking.php</phpfile> 
     </widget> 
     <widget id="01" status="on"> 
      <name>Room Nights</name> 
      <phpfile>room_nights.php</phpfile> 
     </widget> 
     <widget id="02" status="on" currency_type="$"> 
      <name>Revenue</name> 
      <phpfile>revenue.php</phpfile> 
     </widget> 
     <widget id="03" status="on"> 
      <name>Visits</name> 
      <phpfile>visits.php</phpfile> 
     </widget> 
     <widget id="04" status="on"> 
      <name>Website Traffic</name> 
      <phpfile>chart.php</phpfile> 
      <dataset> 
       <data> 
        <startdate>2014-10-01</startdate> 
        <enddate>2014-10-12</enddate> 
        <lines> 
         <line num="1" name="Booking Engine"> 
          <point>2014-10-01, 132</point> 
          <point>2014-10-02, 123</point> 
          <point>2014-10-03, 171</point> 
          <point>2014-10-04, 99</point> 
          <point>2014-10-05, 72</point> 
          <point>2014-10-06, 85</point> 
          <point>2014-10-07, 102</point> 
          <point>2014-10-08, 107</point> 
          <point>2014-10-09, 124</point> 
          <point>2014-10-10, 132</point> 
          <point>2014-10-11, 136</point> 
          <point>2014-10-12, 131</point> 
         </line> 
         <line num="2" name="Revenue"> 
          <point>2014-10-01, 123</point> 
          <point>2014-10-02, 99</point> 
          <point>2014-10-03, 65</point> 
          <point>2014-10-04, 201</point> 
          <point>2014-10-05, 123</point> 
          <point>2014-10-06, 156</point> 
          <point>2014-10-07, 123</point> 
          <point>2014-10-08, 76</point> 
          <point>2014-10-09, 45</point> 
          <point>2014-10-10, 123</point> 
          <point>2014-10-11, 190</point> 
          <point>2014-10-12, 143</point> 
         </line> 
        </lines> 
       </data> 
      </dataset> 
     </widget> 
     <widget id="05" status="on"> 
      <name>Tips</name> 
      <phpfile>tips.php</phpfile> 
     </widget> 
     <widget id="06" status="on"> 
      <name>Recent Bookings</name> 
      <phpfile>recent_bookings.php</phpfile> 
     </widget> 
     <widget id="07" status="on"> 
      <name>Timeline</name> 
      <phpfile>timelines.php</phpfile> 
     </widget> 
     <widget id="08" status="on"> 
      <name>Employees</name> 
      <phpfile>employees.php</phpfile> 
     </widget> 
     <widget id="09" status="on"> 
      <name>Daily Progress</name> 
      <phpfile>daily_progress.php</phpfile> 
     </widget> 
    </widgets> 
</user> 

и сценарий:

JS

<script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function() { 

      getXmlGraphData(); 

      //Gets the XML data from the widgets.xml file 
      function getXmlGraphData() { 
       var request = new XMLHttpRequest(); 
       var user; 
       var lines = []; 
       var points = [[]]; 

       request.open("GET", "widgets.xml", false); 
       request.send(); 

       var xml = request.responseXML; 
       var lines = xml.getElementsByTagName("line"); 

       for (var i = 0; i < lines.length; ++i) { 
       if (!lines) { 
        lines = []; 
       } 

       for (var j = 0; j < lines[i].childNodes.length; ++j) { 
        if (!points[i]) { 
         points[i] = []; 
        } 
        points[i][j] = lines[i].childNodes[j].textContent; //the problem begins here 
       } 
       } 

       document.write(points); 
      } 

     }); 
    </script> 

Выход

Обратите внимание на пробелы между значениями:

,2014-10-01, 132, ,2014-10-02, 123, ,2014-10-03, 171, ,2014-10-04, 99, ,2014-10-05, 72, ,2014-10-06, 85, ,2014-10-07, 102, ,2014-10-08, 107, ,2014-10-09, 124, ,2014-10-10, 132, ,2014-10-11, 136, ,2014-10-12, 131, , ,2014-10-01, 123, ,2014-10-02, 99, ,2014-10-03, 65, ,2014-10-04, 201, ,2014-10-05, 123, ,2014-10-06, 156, ,2014-10-07, 123, ,2014-10-08, 76, ,2014-10-09, 45, ,2014-10-10, 123, ,2014-10-11, 190, ,2014-10-12, 143, 

Если вы ее решить, заранее спасибо.

ответ

0

trim функция, чтобы избавиться от белых пространств в начале и конце строки. Также проверьте нулевые строки.

Например:

var str=" text " 
var trimmedText=str.trim()//returns "text" 
+0

Я предполагаю, что это может быть ошибка в том, как я потянув данные из узла. Я рассматривал этот вариант, но я хочу посмотреть, есть ли другой способ решить проблему, которая не включает маскировку ошибки, если это так. –

+0

, возможно, вам потребуется обратиться к этому: http://stackoverflow.com/questions/4708400/javascript-xml-parsing –

Смежные вопросы