помочь с ActionScript 3 регулярных выражений и XMPP разделов - PullRequest
0 голосов
/ 20 октября 2010

у меня есть строка:

<presence to="testsubject_1@server.org/d9ec56e4"
from="room@conference.server.org/testsubject_2">
<x xmlns="http://jabber.org/protocol/muc#user"><item affiliation="none"
role="visitor"/></x></presence>

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

Ответы [ 3 ]

1 голос
/ 20 октября 2010

ARGH!Я настоятельно рекомендую вам не использовать регулярные выражения для анализа XML, поэтому у нас есть анализаторы XML.

var raw_data:String = '<presence to="testsubject_1@server.org/d9ec56e4" from="room@conference.server.org/testsubject_2"> <x xmlns="http://jabber.org/protocol/muc#user"><item affiliation="none" role="visitor"/></x></presence>';
trace("raw_data:", raw_data);
var presence:XML = new XML(raw_data);
trace("presence:", presence);
trace("root name == presence:", (presence.localName() == "presence")); // [trace] root name == presence: true
trace("from:", presence.@from); // [trace] from: room@conference.server.org/testsubject_2

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/XML.html

Или просто используйте одну из множества библиотек XMPP там:

http://code.google.com/p/as3xmpp/

http://code.google.com/p/seesmic-as3-xmpp/

0 голосов
/ 20 октября 2010

Поиск: /<presence\b(?=[^><]*\sto\s*=)[^><]*\sfrom\s*=\s*["']([^><"']*)["'].*?</presence>/gis

$1 будет относиться к тому, кто его, например, room@conference.server.org/testsubject_2

Работает, даже если to / from в другом порядке. Это работает, даже если XML использует одинарные кавычки, но между одинарными кавычками не должно быть одинарных кавычек. Я могу улучшить это поведение дальше, но регулярное выражение станет длиннее.

Если вы принимаете во внимание искаженные документы XML, вы не должны использовать регулярные выражения, вместо этого используйте DOM или XPath.

0 голосов
/ 20 октября 2010

/<(\w+)(( to|from)=\"([^\"]+)\")+>.*</\1>/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...