2013-11-20 19 views
0

我正在使用edX Studio製作課程。我想做一個自定義的python評估輸入問題。在標籤中的python代碼中,xml標籤被><符號關閉似乎存在問題?如何在xml中嵌入python腳本,使用大於或小於符號的符號?

<?xml version="1.0"?> 
<problem> 
    <p>Name as many online learning platforms as you can: </p> 
    <script type="loncapa/python"> 

def make_a_list(name_string): 
    return name_string.split(',') 

def count_names(name_list): 
    return len(name_list) 

def how_many_oli(expect, ans): 
    oli_names = ['udacity', 'udemy', 'codecademy', 'iktel' 
     'codeschool', 'khan academy', 'khanacademy', 'coursera', 'edx', 'iversity'] 
    names = make_a_list(ans) 
    how_many = len(set(names)) 
    message_hint = 'Good work!' 
    for e in names: 
     e=e.strip('"') 
     e=e.strip("'") 
     e=e.strip() 
     e=e.lower() 
     who_is = e 
     if e not in oli_names: 
      message_hint = message_hint+" Tell us about "+str(who_is).title()+"?" 
    if how_many < 1: 
     return { 'ok': False, 'msg': 'None at all?'} 
    if how_many < 5: 
     return { 'ok': True, 'msg': 'Only '+str(how_many)+"?"} 
    if how_many == 5: 
     return { 'ok': True, 'msg': message_hint } 
    if how_many > 5: 
     return { 'ok': True, 'msg': message_hint } 
    return False 

    </script> 
    <customresponse cfn="how_many_oli"> 
    <textline size="100" /> 
    </customresponse> 
</problem> 

我該如何避免這種情況?我知道我可以更改代碼以避免使用<>,但是必須有方法來使用它們或類似的東西?在XML

+2

使用XML實體的代碼還是什麼? – aIKid

回答

7

文本內容(character data必須逃脫<,並使用pre-defined XML entities&字符。 Python代碼也不例外:

if how_many &lt; 1: 

其中<被替換爲&lt;&&amp;

正確的XML解析器將返回未轉義的文本內容,用原始字符替換這些實體。

+0

其中'lt'是'&name;'格式的XML實體的名稱... – nicholaschris

4

<>是XML實體。您需要轉義它們,即您需要使用&lt;&gt;。如果你使用&本身,&amp;

如果這是一個痛苦,你也可以把整個事情在CDATA節:

http://www.w3schools.com/xml/xml_cdata.asp

看起來是這樣的:

<script> 
<![CDATA[ 
if how_many < 1: 
    return { 'ok': False, 'msg': 'None at all?'} 
]]> 
</script> 
+0

與Martijn Pieters相同的答案... –

+0

@KDawG當然,這種情況在SO上發生了很多:人們經常在同一時間發佈他們的答案... – 2013-11-20 15:03:34

+0

@arbautjc因此,因爲他發佈了一分鐘遲到*相同的答案*他會考慮刪除.... –

相關問題