Roku - не анализировать искаженный xml

У меня странное поведение при разборе большого xml (но я не уверен, что тот факт, что он большой, вызывает проблему). Это формат xml:

<?xml version="1.0" encoding="UTF-8"?>
  <webservice>
    <control>
   <operation>get_clips</operation>
   <status>0</status>
    </control>
    <data>
       <cat size="4" lang="EN"/>
       <cat size="3" lang="EN"/>
       ' and 19 more other similar 'cat' elements
     </data>
  </webservice> 

и это код, где m.rawResponse - это строка xml выше.

if m.rawResponse <> "" then
  xml = CreateObject("roXMLElement")
  print "################ "; m.rawResponse ' contains the entire xml
  xml.Parse( m.rawResponse )
  print "################ "; m.rawResponse ' contains the entire xml

  ' I've tried like this
  categories = xml.data.GetChildElements()
  print "number of categories: " ; categories.Count() ' prints 14

  ' and also like this
  i = 0
  for each categ in xml.data.cat
     i = i +1    
  end for
  print i ' prints 14
end if 

Проблема в том, что обрабатывается только 14 элементов cat вместо 21, и я действительно не знаю, почему. Пожалуйста, помогите мне с любыми идеями. Большое спасибо!

Позднее редактирование Я добавил проверку, чтобы убедиться, что синтаксический анализ прошел успешно и что-то пошло не так. Проблема связана с символом & - у меня есть в xml следующая строка:

<director>Donald Nij & Rick Senjin</director>

Как решить этот вопрос, но не на стороне сервера, а на коде Roku? Я не мог найти решение поиска в Интернете. спасибо


person Paul    schedule 18.04.2012    source источник
comment
Опубликуйте другие 19 элементов «кошки», пожалуйста.   -  person Torious    schedule 18.04.2012
comment
@Torious: я обновил вопрос ... Теперь стало немного понятнее, в чем проблема, но до сих пор нет решения для нее ...   -  person Paul    schedule 18.04.2012
comment
Да, & следует кодировать как &amp; в XML.   -  person Torious    schedule 18.04.2012


Ответы (1)


В Roku SDK извлеките функцию ReplaceSubstring из generalUtils.brs и вставьте ее в свой проект. Используйте это, чтобы заменить «&» в вашем коде на «&». Вы также можете использовать компонент roRegex, который может быть быстрее. В идеале вы должны исправить это на сервере, потому что проблема в том, что вы отправляете на свое устройство неправильный xml, а все остальное - кладж.

person alphablender    schedule 11.05.2012
comment
Привет. Поскольку у меня нет доступа к серверной части, я исправил это на стороне клиента, используя, как вы сказали, roRegex, например: xmlraw = xfer.GetToString() re = CreateObject("roRegEx"," & ","") xml = re.ReplaceAll(xmlraw," &amp; ") Спасибо. - person Paul; 15.05.2012