2010-06-11 8 views
0

그래서 XML 파일을 Perl의 문자열로 읽고 SOAP 메시지의 일부로 보내려고합니다. 나는 SOAP가 파일을 보내는 방법이 있기 때문에 이것이 이상적이지 않다는 것을 알고있다. 그러나 나는 설정되어있는 SOAP를 사용해야하는 것으로 제한되어 있으며, 파일 지원으로 보내기 위해 설정되어 있지 않다.Perl <>에 대한 정규식 []

따라서 마크 업 태그 <을 구문 분석하고 []로 바꿔야합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

+3

원본 XML 파일의 내부에'['또는']'가 있으면 어떻게됩니까? – leonbloy

+3

또는'<' and '>'cdata의 일부로 보시겠습니까? –

+0

또는>를 이스케이프 할 필요가없는 일반 데이터의 일부로 사용합니다. – mirod

답변

2

윌 뭔가?

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

y은 일대일 대체를 수행합니다. <[], >이된다. The perlop documentation에 자세히 설명되어 있습니다.

+1

실제로 작동했지만 SOAP 메시지를 보내려고하는 문제가 해결되지 않았습니다. 그래도 고마워. –

3

하면 간단하게 (아마도 꺾쇠 괄호 어딘가에 당신이 교체하지 않으려는 것을 CDATA 섹션에 표시되기 때문에), 그때는 아마에서 많은 이익을하지 않을 것이다 당신을 위해 작동하지 않는 ]에 의해 [>에 의해 < 교체 regexes here. 정규식은 XML과 같은 비정규 언어와 일치하는 데 적합하지 않습니다.

당신은 <([^>]+)> 검색 및 교체 멀리 될 수있는 위치 [$1]과 : 당신을 위해이 작품 같은 간단한

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

아기 물개를 생각해 보지 않겠습니까?

다른 사람이 이미 정규식에 이렇게 답변과 의견 모두에서 지적했듯이 즉시 데이터가 충분히 복잡해진다으로 원인이 문제는 [/] 또는 </> 문자 중 하나를 포함하는 것입니다. 그런 일이 발생하면 간단한 정규 표현식이 깨져서 다시 파기하거나 실제 XML 파서 및/또는 더 나은 XML 파서를 사용하여 다시 구현하기 전에 좀 더 길어질 수 있기를 기대하면서 다시 묶어야합니다. SOAP 구현.

OTOH, leonbloy의 자료를 인코딩하는 base64의 제안은 사실 꽤 좋은 것입니다. 나는 그것에 대해 생각하지 않았으며 적절한 SOAP 구현뿐만 아니라 보낸 데이터가 커야한다는 경고와 함께 작동해야합니다. 와이어 레벨 디버깅을 수행해야하는 경우 데이터를 해석하기가 더 어려울 수 있습니다. 함유량.

관련 문제