2012-04-22 1 views
1

우리는 C#에서 IronPython을 사용하고 있으며 콘솔과 응용 프로그램에서 다른 결과를 얻습니다.IronPython, C# 및 XML - 들여 쓰기를 중단 하시겠습니까?

str=[] 
a = 1 
b = 0 
c = 1 
if a==1: 
    str.append('One') 

if b==1: 
    str.append('Two') 

if c==1: 
    str.append('Three') 

out=','.join(str) 
print out 

을 그러나 동일한 코드는 우리의 응용 프로그램에 오류를 반환 :

이 코드는 IronPython의 콘솔에 잘 실행 문자열 때문에,

unexpected token 'if' 

내가 문제 내 줄 바꿈에 의심 파이썬 코드를 포함하는 것은 XML 통과 (XML>의 C#> 파이썬) :

<Set key="PythonCode" value="ipy:str=[] 
a = 1 
b = 0 
c = 1 
if a==1: 
    str.append('One') 

if b==1: 
    str.append('Two') 

if c==1: 
    str.append('Three') 

out=','.join(str)"/> 

다른 COM mands는 예상 결과를 반환하고, 내 문제는 들여 쓰기 명령 (조건, 루프)입니다.

C# 코드에 액세스 할 수 없기 때문에 한 줄짜리를 쓰거나 들여 쓰기 나 줄 바꿈에 의존하지 않는 방법을 찾고 있습니다. 나는이 시도 :

<Set key="PythonCode" value="ipy:str=[]; 
a = 1; 
b = 0; 
c = 1; 
if a==1: str.append('One'); 
if b==1: str.append('Two'); 
if c==1: str.append('Three'); 
out=','.join(str);"/> 

을하지만 각 조건 이후에 빈 줄이 있어야 때문에, 다시 같은 오류가 발생합니다.

아이디어가 있으십니까?

+0

"파이썬 코드가 들어있는 문자열이 XML을 통해 전달됩니다."왜 이런 일이 발생합니까? –

+0

XML은 디자이너가 응용 프로그램을 사용하기위한 인터페이스입니다. 프로그래머가 아니기 때문에 XML 파일을 만들고 수정하기가 훨씬 쉬워집니다. 이 경우 우리는 파이썬 코드를 구현할 필요가 있으며, 이것이 실행될 필요가있는 코드를 전달하는 유일한 방법이다. – GuyB7

+0

프로그래머가 아니라면 Python을 XML에 어떻게 포함시킬 수 있습니까? –

답변

1

비 유효 공백이

http://www.w3.org/TR/1998/REC-xml-19980210#AVNormalize

보존되지는 XML 프로세서는 정규화해야 를 (. ..) 공백 문자 (# x20, #xD, #xA, # x9)는 정규화 된 값에 # x20을 추가하여 처리되지만 "# xD # xA"시퀀스에는 하나의 # x20 만 추가됩니다 외부 구문 분석 된 엔터티의 일부이거나 내부 구문 분석 된 엔터티의 리터럴 엔터티 값입니다. (...) 선언 된 값이 CDATA가 아닌 경우 XML 프로세서는 선행 및 후행 공백 (# x20) 문자를 버리고 공백 (# x20) 문자 시퀀스를 다음과 같이 바꿔 표준화 된 속성 값을 처리해야합니다. 단일 공백 ​​(# x20) 문자.당신이 XML 태그 내에서 상당한 공백으로 텍스트를 전송하려면

, 당신은 cdata section 내부를 묶어야합니다 :

<<Set key="PythonCode"><![CDATA[ 

YOUR CODE HERE 

]]></Set> 

를 지금까지 내가 아는 한, 당신은 속성 내에서 CDATA 섹션을 사용할 수 없습니다 문자열이므로 XML 형식의 해당 부분을 변경하여 코드를 태그로 묶어야합니다.


또 다른 해결 방법은 공백없는 공백을 유지하도록 XML 내보내기와 XML 가져 오기 도구에 알리는 것입니다. 이것은 당신이 XML (하여 XDocument,을 XmlDocument, ...)를 구문 분석하는 데 사용하는 방법에 따라 수행하는 방법 C#을위한

, 예를

http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.preservewhitespace(v=vs.71).aspx

http://msdn.microsoft.com/en-us/library/bb387014.aspx

http://msdn.microsoft.com/en-us/library/bb387103.aspx

에 대한 참조

하지만 cdata를 사용하는 것이 더 좋은 해결책입니다.


분명히하지 말아야 할 것이 무엇입니까? Whython – Python For People Who Hate Whitespace

+0

고마워,이게 내가 필요한거야! – GuyB7

0

XML에서 나오는 코드가 줄 바꿈없이 표시되는 것처럼 보입니다.
그렇다면 파이썬 코드를 실행할 희망이 거의 없습니다.

XML을 다르게 동작시키는 방법을 모릅니다. 어쩌면 개행 문자 (아마도 \n 또는 <br>)로 번역 될 수있는 텍스트에 포함시킬 수있는 것이 있습니다.

if 문은 줄 바꿈 없이도 단일 행 형식으로 작동하지 않습니다. 이는 한 줄에 :을 두 번 사용할 수 없기 때문입니다. 이 프로그램에
, 당신은 and으로 if 문을 대체 할 수 :

a==1 and str.append('One') 

이 방법은 코드가 한 줄이 될 수 있습니다.
그러나이 문제를 더욱 심각하게 생각하면 프로그램 방식이 매우 어려워집니다. 다음과 같은 속성 값이 어플리케이션에 전달 또는 유효성을 체크하기 전에 XML 형식

+0

네, XML이 여러 줄 바꿈과 공백을 결합하는 것 같습니다 (확실치 않지만 C# 응용 프로그램 용 디버거가 없습니다). 내 구체적인 경우 귀하의 제안은 완벽하게 맞습니다 - 감사합니다! 줄 바꿈으로 바꿔야하는 특수 문자를 추가해야한다고 생각합니다. – GuyB7

관련 문제