2008-08-10 6 views
8

좀 XML 문서를 생성하고 있는데이 주소 부분에 관해서 I는 다음과 같이 조각을 가지고XML 문서에서 줄 바꿈에 민감한 것은 "나쁜 습관"입니까?

<Address>15 Sample St 
Example Bay 
Some Country</Address> 
내가 XHTML이 변환에 대해 가지고있는 XSLT는 줄 바꿈을 변환하는 몇 가지 펑키 재귀 템플릿을 가지고

문자열 내의 문자는 < br/> 태그입니다.

모두 정상적으로 작동합니다. 그러나 XML 문서 내에서 줄 바꿈에 의존하는 것은 "나쁜 습관"으로 간주됩니까? 그렇다면 대신이 작업을 수행하는 것이 좋습니다? 내 텍스트가 같은 태그가 여러 줄 수 있습니다 모든 장소를 포장 정말 어색한 것처럼

<Address><Line>15 Sample St</Line> 
<Line>Example Bay</Line> 
<Line>Some Country</Line></Address> 

가 보인다 ..

답변

9

데이터를 구분하기가 쉽지 않기 때문에 일반적으로 줄 바꿈에 의존하는 것이 좋지 않은 것으로 간주됩니다. 대부분의 XML 프로세서는 사용자가 XML에 넣는 공백을 유지하지만 보장 할 수는 없습니다.

실제 문제는 XML을 읽을 수있는 형식으로 출력하는 대부분의 응용 프로그램은 XML의 모든 공백을 상호 교환 할 수 있다고 생각하고 이러한 줄 바꿈을 단일 공간으로 축소 할 수 있습니다. 그래서 XSLT가 데이터를 올바르게 렌더링하기 위해 이러한 고리를 뛰어 넘어야합니다. "br"태그를 사용하면 변환이 크게 단순 해집니다.

또 다른 잠재적 인 문제는 XML 편집기에서 XML 문서를 열어 예쁜 인쇄를하면 그 줄 바꿈을 잃을 가능성이 있다는 것입니다.

줄 바꿈을 계속 사용하는 경우 "주소"에 xml : space = "preserve"속성을 추가하십시오.

XML 응용 프로그램을 자주 보인다 : (. 당신이 하나를 사용하는 경우 당신은, 당신의 DTD에서이 작업을 수행 할 수 있습니다)

일부는

  • article from XML.com를 읽고 제안하면 다음과 말한다 공백에 대한 태도를 취하는 것 에있는 장소에 관한 규칙 때문에 공백이있는 공백 문자 문제가되지 않을 때도 있습니다. 응용 프로그램을 무료로 추가하거나 특정 위치의 공백을 제거하십시오.

-1

그래, 난 공백을 보호하는 것 CDATA 블록을 사용하여 생각합니다. 일부 구문 분석기 API를 사용하여 공백을 보존 할 수 있습니다.

2

유일한 진짜 문제는 XML을 읽기가 더 어렵게 만든다는 것입니다. 예 :

<Something> 
    <Contains> 
     <An> 
      <Address>15 Sample St 
Example Bay 
Some Country</Address> 
     </An> 
    </Contains> 
</Something> 

예쁜 XML은 문제가되지 않는다면 작동하는 한 걱정하지 않아도됩니다. 예쁜 XML이 걱정된다면 XML에 포함하기 전에 명시적인 개행을 <br /> 태그 또는 \n으로 변환합니다.

1

XML을 읽고 쓰는 방법에 따라 다릅니다.

XML이 자동으로 생성되는 경우 - N \ 줄 바꿈 또는 명시 적 플래그
로 해석되는 경우 - 다음 걱정할 필요가 없습니다. 귀하의 의견은 다른 XML을 가지고 있지 않으므로 XML을 전혀 사용하지 않는 것이 훨씬 깔끔합니다.

수동으로 태그를 사용하는 경우 나에게 묻는다면 줄 바꿈 만 있으면 더 깨끗합니다.

DOM을 사용하여 XML에서 구조를 제거하는 경우는 예외입니다. 이 경우 줄 바꿈은 적절하게 계층 구조를 나타내지 않으므로 분명히 악의적입니다. 그러나 계층 구조가 응용 프로그램과 관련이없는 것처럼 들리므로 줄 바꿈이 충분한 것으로 들립니다.

XML이 좋지 않은 경우 (특히 자동으로 생성되는 경우) 특히 Tidy이 도움이 될 수 있지만 XML보다 HTML에서 더 잘 작동합니다.

-1

정말해야 할 일은 XML을 공백을 유지하는 형식으로 변환하는 것입니다.

그래서 오히려 (당신이 줄 바꿈 포함 여부) BR/> 당신이 당신의 주소가 기능적으로 보존하는 < 사전 >

그 방법으로 전체 블록을 포장한다 <에 \ n을 교체하고자보다 및 XSTL은 결과에서 공백을 보존할지 여부를 선택할 수 있습니다. 내가 <Line> 태그 뭐가 잘못 표시되지 않습니다 &#x000D;

-1

나는 당신이 <br/> 줄 바꿈을 추가하거나 어쩌면 라인 휴식 엔티티를 사용해야 하나 권장합니다.
분명히 데이터의 시각화가 중요합니다. 첫 번째 예에서는 줄 바꿈을 통해 데이터에 유지하기에 충분합니다. 벌금. 그렇다면 정말로 보관하십시오. "마법"에 의지하지 마십시오. 나중에 필요할 때마다 필요한 모든 데이터를 보관하고 데이터의 저장된 부분에서 완벽하게 추론 할 수 없으며 시각화 데이터 (줄 바꿈 및 기타 형식) 인 경우에도 데이터를 유지하십시오. 사용자 (다른 개발자의 최종 사용자)는 데이터를 원하는대로 형식화하는 데 시간을 보냈습니다. 사용자가 의도하지 않은 정보 (입력에 가까운 API 문서/텍스트)를 그대로 유지하거나 그대로 두십시오.

0

-

-2

당신이 당신의 바꿈 보존 필요 CDATA 블록을 사용하는 경우, tweakt said

로 그렇지 않으면 조심. 대부분의 경우 XML 소프트웨어로 줄 바꿈이 보존되지만 때로는 그렇지 않을 수도 있습니다. 우연의 일치에만 의존하는 작업에 의존하고 싶지는 않습니다.

2

속성을 사용하여 데이터를 저장하는 방법은 무엇입니까? 텍스트 노드보다는 :

<Address Street="15 Sample St" City="Example Bay" State="" Country="Some Country"/> 

내가 텍스트 노드 대 속성의 사용은 종종 토론 주제는 것을 알고,하지만 난 속성을 시간의 95 %를 부착 한, 어떤 문제 때문에 없었어요 그것의.

1

주소가이 경우 약간 정규화되지 않았기 때문에 이것은 약간의기만적인 예일 수 있습니다.그러나 주소 필드를 정상화하기가 어렵 기 때문에 합리적인 균형을 유지해야합니다. 줄 바꿈이 중요한 정보를 전달하게되면 우연히 정규화되지 않고 우체국이 줄 바꿈의 의미를 해석하게됩니다.

정상적으로 이것은 큰 문제는 아니지만,이 경우 선이 다른 문화권에서 의미하는 바를 실제로 해석하지 않는다는 것을 분명히 보여주기 때문에 Line 태그가 가장 정확하다고 생각합니다. 주소를 입력하는 대부분의 양식에는 우편 번호 등이 있으며 주소 1과 2가 있습니다.

라인 태그를 사용하는 어색함은 일반적인 XML로 제공되며 코딩 공포에 대해 많은 논란이있었습니다. http://www.codinghorror.com/blog/archives/001139.html

1

XML 사양은 whitespacelinefeeds and carriage returns in particular과 관련하여 무언가를 말합니다. 그래서 자신을 진정한 라인 피드 (x0A)로 제한한다면 당신은 괜찮을 것입니다. 그러나 많은 편집 도구가 "더 나은 표현"을 위해 XML을 다시 형식화하고 특수 구문을 없앨 수 있습니다. 이 표준 어휘에 관해서

<Address xmlns="http://www.w3.org/1999/xhtml">15 Sample St<br />Example Bay<br />Some Country</Address> 

바퀴를 재발견 할 필요가 없습니다 다음보다 더 강력하고 깨끗한 방법 "< 라인> </라인>"아이디어는 단순히 네임 스페이스를 사용하고 XHTML의 내용, 예를 포함 할 것 .

3

CDATA 블록으로 줄 바꿈을 유지할 수 있다고 말하는 사람들은 거의 없습니다. 이것은 잘못된 것입니다. CDATA 섹션은 마크 업을 문자 데이터로만 처리하게하고 이 아니라 줄 바꿈 처리를 변경합니다.

<Address>15 Sample St 
Example Bay 
Some Country</Address> 

정확히

<Address><![CDATA[15 Sample St 
Example Bay 
Some Country]]></Address> 

다른 API를이를보고하는 방법을 유일한 차이점은 동일합니다.

관련 문제