E4X Добавляют содержание CDATA

main.py
setup.py
app/ ->
    __init__.py
    package_a/ ->
       __init__.py
       module_a.py
    package_b/ ->
       __init__.py
       module_b.py
  1. Вы работаете python main.py.
  2. main.py делает: import app.package_a.module_a
  3. module_a.py делает import app.package_b.module_b

, Кроме того, 2, или 3 мог использовать: from app.package_a import module_a

, Который будет работать, пока Вы имеете app в Вашем PYTHONPATH. main.py мог быть где угодно тогда.

, Таким образом, Вы пишете setup.py для копирования (устанавливают) целый пакет приложения и подпакеты к папкам Python целевой системы, и main.py для предназначения для папок сценария системы.

9
задан Jacob Poul Richardt 10 August 2009 в 09:36
поделиться

2 ответа

как насчет этого:

var xml:XML = <doc><{nodeName}>{nodeValue}</{nodeName}></doc>
trace(xml.toXMLString());

выводит:

<doc>
  <tag>&lt;non-escaped-content&gt;</tag>
</doc>

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

версия с XMLNode использует пакет flash.xml , который предназначен для обратной совместимости с AS2 ... даже не заметил, он исчез в FP10 ... однако вы можете использовать этот

var x:XML = new XML("<![CDATA[" + nodeValue + "]]>");

в качестве замены, а затем использовать appendChild , как вы бы использовали flash .xml ...

в качестве альтернативы вы можете использовать его стиль e4x, если вы оберните его в функцию

function cdata(data:String):XML {
    return = new XML("<![CDATA[" + data + "]]>");
}

, а затем

var xml:XML = <doc><{nodeName}>{cdata(nodeValue)}</{nodeName}></doc>

, но лично я думаю, что строки, основанные как на тексте, так и относительно короткие, должны быть экранировано, а не заключено в CDATA ...


обновление: Я не понимаю, о чем вы здесь говорите

"& lt;" сильно отличается от "<"

, в этом вся суть ...: D ... «<» будет интерпретироваться во время синтаксического анализа, тогда как «& lt;» просто повторно преобразован в «<» , поэтому после синтаксического анализа XML у вас будет точно та же строка, что и раньше ...

это мой код:

package {
    import flash.display.MovieClip;
    public class Main extends MovieClip {       
        public function Main():void {
            var nodeName:String = "tag";
            var nodeValue:String = "<non-escaped-content>";
            var xml:XML = <doc><{nodeName}>{cdata(nodeValue)}</{nodeName}></doc>;
            trace(cdata("test").toXMLString());
            trace(xml.toXMLString());
        }
        private function cdata(data:String):XML {
            return new XML("<![CDATA[" + data + "]]>");
        }
    }
}

отлично работает у меня на flash player 10, скомпилирован с flex sdk 4 ... у меня нет flash IDE на рука, но когда дело доходит до чистого ActionScript, результаты почти точно такие же, так что он должен работать (вы можете использовать это как свой класс документа, если хотите, или просто создать его экземпляр) ...

кстати. первая трассировка показывает, что второй пример работает,

7
ответ дан 4 December 2019 в 10:33
поделиться

Вышеупомянутая функция cdata должна выглядеть следующим образом, обратите внимание, что последний символ ">" экранирован в коде. В противном случае возникают ошибки компиляции.

private function cdata(data:String):XML
{
    return new XML("<![CDATA[" + data + "]]\>");                
}
7
ответ дан 4 December 2019 в 10:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: