2010-06-11 3 views
0

Итак, я пытаюсь прочитать XML-файл в строке в Perl и отправить его как часть сообщения SOAP. Я знаю, что это не так, как есть методы для отправки файлов SOAP, однако мне ограниченность использования SOAP, который настроен, и он не настроен для отправки с поддержкой файлов.Perl Regular Expression [] для <>

Поэтому мне нужно разобрать метки разметки <> и заменить их на []. Каков наилучший способ сделать это?

+3

Что делать, если исходный файл xml имеет '[' или ']' внутри? – leonbloy

+3

или '<' and '>' как часть cdata? –

+0

или> как часть регулярных данных, которые не должны быть экранированы – mirod

ответ

2

Уилла что-то просто нравится эта работа для вас?

$a=~y/<>/[]/; 

y выполняет замену один на один. < становится [ и > становится ]. The perlop documentation объясняет это более подробно.

+1

Это действительно сработало, однако это не помогло решить проблемы, которые я пытаюсь отправить моему SOAP-сообщению. Спасибо хоть. –

3

Если просто заменить < на [ и > по ] не работает для вас (возможно, потому, что угловые скобки показывают в разделах CDATA где-то, что вы не хотите заменить), то вы, вероятно, не будет прибыль много от regexes здесь. Регулярные выражения не подходят для сопоставления нерегулярных языков, таких как XML.

Вы могли бы уйти с поиском <([^>]+)> и замена его [$1]:

$subject =~ s/<([^>]+)>/[$1]/g; 
1

Не может кто-нибудь подумать о детях?

Как и другие уже указывал, как в ответах и ​​в комментариях, делая это с помощью регулярных выражений будет вызвать проблемы, как только ваши данные становятся достаточно сложными, чтобы включать в себя либо [/] или </> символов. Как только это произойдет, любое простое регулярное выражение сломается, и вам понадобится либо скопировать его ленту вместе в надежде, что он будет хромать еще немного, прежде чем снова сломаться или повторно реализовать его с помощью реального синтаксического анализатора XML и/или лучше SOAP.

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

Смежные вопросы