문제

일부 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>

내 텍스트가 여러 줄로 되어 있는 모든 위치를 그런 태그로 감싸는 것은 정말 어색할 것 같습니다..

도움이 되었습니까?

해결책

줄 바꿈에 의존하는 것은 일반적으로 나쁜 습관으로 간주됩니다. 왜냐하면 이는 데이터를 구별하는 취약한 방법이기 때문입니다.대부분의 XML 프로세서는 XML에 입력한 공백을 보존하지만 보장되지는 않습니다.

실제 문제는 XML을 읽을 수 있는 형식으로 출력하는 대부분의 응용 프로그램이 XML의 모든 공백을 상호 교환 가능한 것으로 간주하고 해당 줄 바꿈을 단일 공백으로 축소할 수 있다는 것입니다.이것이 바로 XSLT가 데이터를 적절하게 렌더링하기 위해 이러한 과정을 거쳐야 하는 이유입니다."br" 태그를 사용하면 변환이 크게 단순화됩니다.

또 다른 잠재적인 문제는 XML 편집기에서 XML 문서를 열고 보기 좋게 인쇄하는 경우 줄바꿈이 손실될 가능성이 있다는 것입니다.

Linebreaks를 계속 사용하는 경우 XML을 추가하십시오 : Space = "보존"속성 "주소". (DTD 에서이 작업을 수행 할 수 있습니다. 하나를 사용하는 경우).)

일부는 읽기를 제안했습니다.

XML 애플리케이션은 종종 공백에 대한 무심한 태도를 취하는 것처럼 보입니다. 왜냐하면 공백이 중요하지 않은 XML 문서의 장소에 대한 규칙은 때때로 이러한 응용 프로그램에 특정 장소에서 공백을 추가하거나 제거하기 위해 무료 고삐를 제공하기 때문입니다.

다른 팁

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

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

와 정확히 똑같다

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

유일한 차이점은 서로 다른 API가 이를 보고하는 방식입니다.

내 생각에 유일한 실제 문제는 XML을 읽기 어렵게 만든다는 것입니다.예를 들어

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

예쁜 XML이 문제가 되지 않는다면 XML이 작동하는 한 걱정하지 않을 것입니다.예쁜 XML이 문제라면 명시적인 줄 바꿈을 다음으로 변환하겠습니다. <br /> 태그 또는 \n XML에 포함하기 전에.

텍스트 노드 대신 속성을 사용하여 데이터를 저장하는 것은 어떻습니까?

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

나는 속성과 속성의 사용을 알고 있습니다.텍스트 노드는 자주 논의되는 주제이지만 저는 95%의 시간 동안 속성을 고수했고 그로 인해 어떤 문제도 겪지 않았습니다.

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

XML이 자동으로 생성되는 경우 - 줄 바꿈 또는 명시적인 경우 플래그가 구문 분석되고 있습니다.
- 그럼 걱정할 것 없어요.입력 내용에는 다른 XML이 없을 가능성이 높으므로 XML을 전혀 사용하지 않는 것이 더 깔끔합니다.

태그를 수동으로 작업하는 경우에는 줄 바꿈만 하는 것이 더 깔끔합니다.

XML에서 일부 구조를 가져오기 위해 DOM을 사용하는 경우는 예외입니다.이 경우 줄 바꿈은 계층 구조를 적절하게 나타내지 않기 때문에 분명히 악합니다.하지만 계층 구조가 애플리케이션과 관련이 없는 것처럼 들리므로 줄바꿈으로 충분하다고 들립니다.

XML이 보기에 좋지 않은 경우(특히 자동으로 생성된 경우) 정돈하다 XML보다 HTML에서 더 잘 작동하지만 도움이 될 수 있습니다.

이 경우 주소가 약간 정규화되지 않았기 때문에 이것은 아마도 약간 기만적인 예일 것입니다.그러나 주소 필드는 정규화하기 어렵기 때문에 이는 합리적인 절충안입니다.줄 바꿈에 중요한 정보가 전달되도록 하면 정규화되지 않고 우체국에서 줄 바꿈의 의미를 해석하게 됩니다.

일반적으로 이것은 큰 문제가 아니라고 말하고 싶지만, 이 경우에는 Line 태그가 가장 정확하다고 생각합니다. 왜냐하면 이는 다른 문화권에서 라인이 의미할 수 있는 것을 실제로 해석하지 않는다는 것을 명시적으로 보여주기 때문입니다.(주소 입력 양식에는 대부분 우편번호 등이 있고 주소 입력란 1과 2가 있다는 점을 기억하세요.)

줄 태그를 사용하는 것의 어색함은 일반 XML에서 발생하며 코딩 공포에 대해 많은 논의가 있었습니다. http://www.codinghorror.com/blog/archives/001139.html

XML 사양에는 다음과 관련하여 할 말이 있습니다. 공백 그리고 특히 라인피드와 캐리지 리턴.따라서 진정한 라인피드(x0A)로 제한한다면 괜찮을 것입니다.그러나 많은 편집 도구는 "더 나은 표현"을 위해 XML 형식을 다시 지정하고 특수 구문을 제거할 수도 있습니다."< line>< / line>" 아이디어보다 더 강력하고 깔끔한 접근 방식은 단순히 네임스페이스를 사용하고 XHTML 콘텐츠를 포함하는 것입니다. 예:

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

표준 어휘에 관해서는 바퀴를 재발명할 필요가 없습니다.

뭐가 문제인지 모르겠어 <Line> 태그.
분명히 데이터 시각화는 데이터에 보관할 만큼 중요합니다(첫 번째 예에서는 줄 바꿈을 통해).괜찮은.그렇다면 실제로 보관하십시오. 보관하기 위해 "마법"에 의존하지 마십시오.나중에 필요하고 저장된 데이터 부분에서 완벽하게 추론할 수 없는 모든 데이터를 보관하고 시각화 데이터(줄바꿈 및 기타 서식)인 경우에도 보관하세요.귀하의 사용자(다른 개발자의 최종 사용자)는 시간을 들여 해당 데이터를 자신이 원하는 대로 형식화했습니다. 해당 데이터를 보관할 생각이 없다고 말하거나(API 문서/입력 근처의 텍스트) 그냥 보관하세요.

네, 제 생각에는 CDATA 블록은 공백을 보호합니다.일부 파서 API를 사용하면 공백을 보존할 수 있습니다.

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

따라서 을 <br />로 대체하기보다는 전체 블록을 <pre>로 래핑해야 합니다.

이렇게 하면 주소가 기능적으로 보존되며(줄 바꿈 포함 여부) XSTL은 결과에 공백을 유지할지 여부를 선택할 수 있습니다.

다음 중 하나를 추가하는 것이 좋습니다. <br/> 줄 바꿈 또는 줄 바꿈 엔터티를 사용할 수도 있습니다. &#x000D;

줄 바꿈을 유지해야 하는 경우 다음과 같이 CDATA 블록을 사용하십시오. 트윅이 말했다

그렇지 않으면 조심하세요.대부분의 경우 줄 바꿈은 XML 소프트웨어에 의해 유지되지만 때로는 그렇지 않을 수도 있습니다. 따라서 우연에 의해서만 작동하는 것에 의존하고 싶지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top