2010-06-25 3 views
2

Delphi 2009를 사용하여 작성중인 IXMLDocument의 문서 요소에 적용 할 선언 된 네임 스페이스 접두사를 얻으려고합니다. 문서 요소가 만들어지면 접두사가있는 네임 스페이스를 선언 할 수 있지만 문서 요소에 적용되지 않고 문서 요소의 접두사를 변경할 수 없습니다. doc.CreateElement (nodename, namespaceURI)를 사용하여 문서 요소를 만들면 지정한 URI가 doc에 대한 기본 네임 스페이스로 추가됩니다. 이는 내가 원하는 것과 다릅니다. 이 문서는 이미 기본 네임 스페이스가있는 다른 문서에 추가 될 예정입니다. IXMLNode 및 FNamespacePrefix : 문자열 TAG_IH_IMPORT 및 NS_HISTORIAN 문자열 상수, eleDoc 있습니다Delphi에서 문서 요소의 접두사를 설정하는 방법

Result := NewXMLDocument; 
    eleDoc := Result.CreateElement(TAG_IH_IMPORT, NS_HISTORIAN); 
    eleDoc.DeclareNamespace(FNamespacePrefix, NS_HISTORIAN); 

. 가져 오기 태그에 적용 : 정말 "H"는 것을 싶어

<Import xmlns="uri" xmlns:h="uri" /> 

: 같은

이의 출력은 보인다. 어떤 제안?

감사합니다. 그 자식 노드에 대한 접두사를 선언, 당신이 임시 문서 노드를 만들 수 있습니다, 또는

Result := NewXMLDocument; 
eleDoc := Result.CreateElement(FNamespacePrefix + ':' + TAG_IH_IMPORT, NS_HISTORIAN); 
eleDoc.DeclareNamespace(FNamespacePrefix, NS_HISTORIAN); 
Result.DocumentElement := eleDoc; 

자식 노드를 추가

답변

3

당신은 당신의 createElement를 (호출 할 때 네임 스페이스 접두사), 즉를 지정할 수 있습니다 그것을 새로운 문서 노드로 지정하십시오. 예 :

Result := NewXMLDocument; 
eleTemp := Result.CreateElement('temp', ''); 
eleTemp.DeclareNamespace(FNamespacePrefix, NS_HISTORIAN); 
eleDoc := eleTemp.AddChild(TAG_IH_IMPORT, NS_HISTORIAN); 
Result.DocumentElement := eleDoc; 
+0

감사합니다. 이미 두 번째 솔루션을 구현했지만 아직 게시하지 않았습니다. 당신의 첫 번째 제안은 더 깨끗해졌고 나는 그것이 작동 할 것이라고 기대하지 않았다는 것을 제외하고는 왜 시작하지 않았는지 알지 못합니다. – RJCookeSE

관련 문제