WML: элемент <do> не имеет определенного типа
Я пытаюсь запустить этот пример WML для переменных, которые я нашел в моем учебнике по WML, но он каждый раз выдает ошибку в одной и той же строке / выражении. Это код:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<card id="card1" title="First Card" newcontext="true">
<p>
Card 1... <br/>
card1 var1=$(card1_var1) <br/>
card2 var1=$(card2_var1) <br/>
card3 var1=$(card3_var1) <br/>
<do type="accept" label="Next Card">
<go href="#card2">
<setvar name="card1_var1" value="val_1"/>
</go>
</do>
</p>
</card>
<card id="card2" title="Second Card">
<p>
Card2 ...<br/>
Card1 var1 = $(card1_var1) <br/>
Card2 var1 = $(card2_var1) <br/>
Card3 var1 = $(card3_var1) <br/>
<do type="accept" label="First Card">
<go href="#card1"/>
</do>
<do type="accept" label="Third Card">
<go href="#card3">
<setvar name="card2_var1" value="val_2"/>
</go>
</do>
<do type="prev" label="Previous Card">
<prev/>
</do>
</p>
</card>
<card id="card3" title="Third Card">
<onevent type="onenterforward">
<refresh>
<setvar name="card3_var1 " value="val_3"/>
</refresh>
</onevent>
<p>
Card 3 ...<br/>
Card1 var1 = $(card1_var1) <br/>
Card2 var1 = $(card2_var1) <br/>
Card3 var1 = $(card3_var1) <br/>
<do type="prev" label="Previous">
<prev/>
</do>
</p>
</card>
Я получаю сообщение об ошибке в строке 26. Даже если тип определен там, он все равно выдает ошибку.
1 ответ
В опубликованном вами примере есть несколько ошибок, из-за которых он не проходит проверку. Это могут быть просто проблемы вырезания и вставки при публикации в Stackru или реальные ошибки, которые могли вызвать сбой синтаксического анализатора.
Строка 1: объявление XML <?xml version="1.0"?>
должен быть в первом столбце; в вашем примере это отступ.
Строка 53: закрывающий тег WML </wml>
пропал, отсутствует.
Есть также два небольших исправления, которые могут быть полезны:
Строка 1: добавить кодировку в объявление XML, например <?xml version="1.0" encoding="UTF-8"?>
Строка 40: есть ошибочный символ пробела в name="card3_var1 "
поэтому переменная не обновляется корректно
С этими исправлениями ваш WML проверяется в соответствии с W3C Validator, так что все должно быть в порядке. Я попробовал это в Openwave 6.2.2 SDK, и это, кажется, работает без каких-либо ошибок.
Исправленный пример:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<card id="card1" title="First Card" newcontext="true">
<p>
Card 1... <br/>
card1 var1=$(card1_var1) <br/>
card2 var1=$(card2_var1) <br/>
card3 var1=$(card3_var1) <br/>
<do type="accept" label="Next Card">
<go href="#card2">
<setvar name="card1_var1" value="val_1"/>
</go>
</do>
</p>
</card>
<card id="card2" title="Second Card">
<p>
Card2 ...<br/>
Card1 var1 = $(card1_var1) <br/>
Card2 var1 = $(card2_var1) <br/>
Card3 var1 = $(card3_var1) <br/>
<do type="accept" label="First Card">
<go href="#card1"/>
</do>
<do type="accept" label="Third Card">
<go href="#card3">
<setvar name="card2_var1" value="val_2"/>
</go>
</do>
<do type="prev" label="Previous Card">
<prev/>
</do>
</p>
</card>
<card id="card3" title="Third Card">
<onevent type="onenterforward">
<refresh>
<setvar name="card3_var1" value="val_3"/>
</refresh>
</onevent>
<p>
Card 3 ...<br/>
Card1 var1 = $(card1_var1) <br/>
Card2 var1 = $(card2_var1) <br/>
Card3 var1 = $(card3_var1) <br/>
<do type="prev" label="Previous">
<prev/>
</do>
</p>
</card>
</wml>