2012-07-25 1 views
0

몇 가지 지침을 렌더링하기 위해 문자열로 조작해야하는 XML이 있습니다. 텍스트는 내가 할 필요가 다음e4x를 사용하거나 regex도 필요합니까?

  1. 이 모든 <nl/>을 교체하고, 지금이

    <?xml version="1.0" encoding="UTF-8"?> 
    <instructions id="detection" version="1.0"> 
    <instruction task="detection"> 
        <phrase type="header">HAS THE CARD TURNED OVER?<nl/><nl/><nl/></phrase> 
        <phrase type="practice">you are now going to do a practice.<nl/><nl/></phrase> 
        <phrase type="real">You are now going to do a test.<nl/><nl/></phrase> 
        <phrase>As soon as the card turns face up:<nl/><nl/></phrase> 
        <phrase><ts/><ts/>Press YES.<nl/><nl/></phrase> 
        <phrase>Go as fast as you can and try not to make any mistakes.<nl/><nl/></phrase> 
        <phrase>If you press YES before a card turns face up, you will hear an error sound.</phrase> 
    </instruction> 
    </instructions> 
    

    처럼 보인다 \ n

  2. 는 \의 t 모든 <ts/> 교체
  3. 조건부 선택 연습 또는 실제, 아마도 다른 것을 제거하여
  4. 결과로 문자열로 남게되는 모든 XML 비트를 제거하십시오. 현재 양식에 적합하지 않은 경우

그래서 난이의 연습 버전을 원하는 말할 수, 나는 지금

HAS THE CARD TURNED OVER?\n\n\n 
you are now going to do a practice.\n\n 
As soon as the card turns face up:\n\n 
\t\tPress YES.\n\n 
Go as fast as you can and try not to make any mistakes.\n\n 
If you press YES before a card turns face up, you will hear an error sound. 

와 끝까지해야한다, 나는 XML의 구조를 변경할 수있는 기회를 가질 수 이것에 대해서는,하지만 내가 확신 할 수없는 것은 내가 위의 모든 것을 e4X로 할 수 있는지 아니면 정규 표현식을 사용해야 하는가? 몇 가지 예는 훌륭합니다.

+0

해야 할 것 : 다음은 E4X를 사용하여 "\ n을"로 <nl> 교체의 예입니다. 당신은 실제로 "\ n"이 필요하거나 시각적으로 휴식을 취할 것입니다. 예를 들어,
태그를 사용하면 무엇을 얻을 수 있습니까? –

+0

텍스트 영역으로 들어가서 현재 하드 코딩 된 텍스트를 \ n \ t 사용하고 xml 구성 시스템으로 옮깁니다 –

+0

\ n으로 대체하려고 시도하는 대신
을 사용하고 싶습니다. 나는 당신이 탭이 필요한 곳에 탭을 사용할 수 있다고 생각합니다. 이때 실제 또는 연습 값이 들어있는 XMLList에서 toString()을 호출하면됩니다. TextArea에 condenseWhite를 설정하지 않은 경우
태그가 필요하지 않을 수도 있지만 원하는 위치에 캐리지 리턴을 배치하여 텍스트 서식을 지정할 수 있습니다. –

답변

1

E4X로 할 수 있습니다. 아마도 정규식만큼 우아하지 않을 수 있습니다. 당신은 연습을 확인 또는 실제 XML를 사용 할 수 E4X 방법의 목록 http://wso2.org/project/mashup/0.2/docs/e4xquickstart.html 에 게시되어

package 
{ 
    import flash.display.Sprite; 

    public class e4xStuff extends Sprite 
    { 
     private var srcxml:XML; 

     public function e4xStuff() 
     { 
      srcxml = new XML( '<instructions id="detection" version="1.0">' + 
       '<instruction task="detection">' + 
       '<phrase type="header">HAS THE CARD TURNED OVER?<nl/><nl/><nl/></phrase>' + 
       '<phrase type="practice">you are now going to do a practice.<nl/><nl/></phrase>' + 
       '<phrase type="real">You are now going to do a test.<nl/><nl/></phrase>' + 
       '<phrase>As soon as the card turns face up:<nl/><nl/></phrase>' + 
       '<phrase><ts/><ts/>Press YES.<nl/><nl/></phrase>' + 
       '<phrase>Go as fast as you can and try not to make any mistakes.<nl/><nl/></phrase>' + 
       '<phrase>If you press YES before a card turns face up, you will hear an error sound.</phrase>' + 
       '</instruction>' + 
       '</instructions>'); 


      processNode(srcxml); 
      trace(srcxml); 
     } 

     private function processNode(xml:XML):XML 
     { 
      //replace <nl/> with \n 
      if(xml.name() == "nl") 
      { 
       return new XML("\n"); 
      } 

      var children:XMLList = xml.children(); 
      if(children.length() == 0) 
      { 
       return xml; 
      } 

      //remove the children 
      xml.setChildren(new XMLList()); 

      //put the children back, one-by-one, after checking for <nl/> 
      for(var i:int=0; i<children.length(); i++) 
      { 
       xml.appendChild(processNode(children[i])); 
      } 
      return xml; 
     } 
    } 
} 

@ 유형