2012-04-20 5 views
4

내가솔로 태그가있는 NSXMLElement입니다. 즉. <태그 이름에 attributename =의 AttributeValue />

<tagname attribute=attributevalue></tagname> 

사용과 같은 일반 XML 태그를 만들 수 있어요 (별도의 닫는 태그가없는 즉. 태그) 솔로 태그를 포함해야 XML 문자열을 만들려고 해요 코드

NSXMLElement *childElement=[[NSXMLElement alloc] initWithName:childName]; 
childElement.stringValue=childValue; 
[childElement addAttribute:[NSXMLNode attributeWithName:attributeName stringValue:attributeValue]]; 
[self.currentNode addChild:[childElement copy]]; 

하지만 나는이

<tagname attributename=attributevalue /> 

답변

2
<tagname attribute=attributevalue></tagname> 
처럼 필요 0

<tagname attributename=attributevalue /> 

는 XML 완전히 동일하고 단지 당신이 그들을 쓰기 어떻게 포맷의 문제이다. "아름답게 형식화 된"XML 소스 코드를 만들 특별한 이유가 없다면 나 자신을 괴롭히지 않을 것입니다.

또한 위 코드는 표현을 작성하지 않으며 XML 소스 코드의 형식이 아닌 내부 구조에 데이터를 저장합니다. 귀하의 질문은 XML 트리 구조를 XML 소스 파일로 내보낼 때만 유효 할 수 있습니다.

+0

내가 통신하고자하는 서버는 ASP입니다. ASP에서 XML 구문 분석기는 둘 다 똑같은 것으로 간주합니까? – Renjith

+0

ASP에서 XML 파서를 모르지만 두 형식을 모두 허용하지 않으면 두 가지 모두 표준 (및 동등한) XML 세그먼트이므로 파서에서 매우 심각한 버그입니다. – MrTJ

+1

하지만 XML 사양으로 돌아가 봅시다. http://www.w3.org/TR/REC-xml/#d0e2433'내용이없는 요소는 비어 있다고합니다. 빈 엘리먼트의 표현은 바로 뒤에 시작 태그 또는 종료 태그가있다. "AND'빈 엘리먼트 태그는 내용이없는 엘리먼트에 사용될 수있다. EMPTY 키워드를 사용하여 선언됩니다. 상호 운용성을 위해 비어있는 요소 태그를 사용하고 SHOULD는 EMPTY로 선언 된 요소에만 사용해야한다.'주의 :'반드시 사용해야한다. '는 의무 사항은 아니므로 다른 형식을 사용하면 여전히 좋다. – MrTJ

1

MrTJ가 말하는 모든 내용은 정확하지만 노드의 텍스트 내용을 설정 했으므로 직렬기를 혼동하는 것이 가능할 수 있습니다. 텍스트 내용 노드 (문자 길이가 0 인 문자열 임에도 불구하고)를보고 시작 태그와 끝 태그를 모두 만들 수 있기 때문에 텍스트 콘텐츠 노드를 볼 수 있습니다.

시도 뭔가 같은 : NSXMLNodeCompactEmptyElement이 같이

:

if ([childValue length] > 0) 
{ 
    childElement.stringValue=childValue; 
} 
8

을 NSData을 만들 때, 파일을 저장하기 전에,이 옵션을 추가

NSData *xmlData = 
    [xmlDoc XMLDataWithOptions:NSXMLNodePrettyPrint | NSXMLNodeCompactEmptyElement]; 

그런 다음 파일을 직렬화 :

참조 : NSXMLNode 클래스 참조
제 상수

NSXMLNodeExpandEmptyElement 요소가 비어있는 경우 팽창한다
    요청; 예 : < 플래그 > </플래그 >. 이것이 기본값입니다.
    Mac OS X v10.4 이상에서 사용할 수 있습니다. NSXMLNodeOptions.h에서 선언되었습니다.

NSXMLNodeCompactEmptyElement 요소가 비어있는 경우 수축한다
    요청; 예 : < 플래그/>.
    Mac OS X v10.4 이상에서 사용할 수 있습니다. NSXMLNodeOptions.h에서 선언되었습니다.