2013-05-24 8 views
4

잘 구성된 XML을 포함하는 몇 개의 텍스트 문자열이 있습니다.xmlNode delphi에 문자열 (또는 TXMLDocument에 XML 조각을 추가하는 방법)

(1)이 문자열을 IXMLNodes으로 바꿀 수 있고 (2) 기존의 XMLDocument에 추가 할 수 있기를 바랍니다. 바람직하게는 새로운 XMLDocument을 먼저 선언하지 않아도됩니다.

이것은 가능하지 않습니다.

동일한 방법으로 달성하기 쉬운 방법이 있습니까? 내 생각은 IXMLNode.XML (문자열) 속성을 사용하고 새 문자열을 삽입하는 것이 었습니다. IXMLNode.XML과 같은 행운은 읽기 전용입니다. 나는 TStringList에 다음 문자열이 있다면 여기에

는 예입니다,

<Property Name="Version" RttiType="tkString"></Property> 
<Property Name="ShowSubunit" RttiType="tkBoolean"></Property> 

그리고 나는 이미 TXMLDocument에로드 된 다음 XML, 어떻게 쉽게로 위의 두 줄을 추가 할 수 있었다 아래 TXMLDocument?

<Program Name="PFOO"> 
    <Class Name="CFOO"> 
    <Property Name="DBN" RttiType="tkString"/> 
    <Property Name="SDate" RttiType="tkClass" ClassType="TXSDATE">12/30/1899</Property> 
    <Property Name="XForm" RttiType="tkEnumeration">xfXML</Property> 
    <Property Name="Singleton" RttiType="tkBoolean">True</Property> 
    </Class> 
</Program> 

다른 어떤 (간단한) 방법 (XML 속성에 대한 보호 된 해킹 없음)을 사용 하시겠습니까?

감사합니다.

답변

2

XML 조각을 수동으로 구문 분석 한 다음 관련 하위 노드/특성을 수동으로 생성하는 경우가 아니면 임시 XMLDocument에 조각을로드 한 다음 필요에 따라 노드를 기본 XMLDocument로 이동해야합니다.

업데이트 : 예를 들어 :

Node := XmlDocument1.DocumentElement.ChildNodes[0]; // <Class> node 
Node.ChildNodes.Add(LoadXMLData('<Property Name="Version" RttiType="tkString"></Property>').DocumentElement); 
Node.ChildNodes.Add(LoadXMLData('<Property Name="ShowSubunit" RttiType="tkBoolean"></Property>').DocumentElement); 
+0

실제로 이것이 유일한 방법 일 수 있습니다. 간단한 예제를 제공 해줄 수 있습니까? – sse

+0

그냥 시도했지만 나 자신을 시도했지만 'importNode "속성 또는 메서드 가져 오기 DOM 공급 업체"MSXML "에 의해 지원되지 않습니다. – sse

+0

여기 내가 시도한 코드가 있습니다 : currProgNode.DOMNode.ownerDocument.importNode (lclXMLObj.Node.DOMNode ,참된); (여기서 lclXMLObj는 TXMLDocument 유형이고 currProgNode는 IXMLNode 유형이며 기본적으로 제안 된대로 XML 문서간에 노드를 복사하려고합니다). 나는 이것이 훨씬 쉬워 져야한다고 정말로 느낀다. 나는 명백한 것을 놓치기를 바란다. 다시 감사합니다. – sse

0

체크 아웃 SimpleStorage. 현재 OmniXML에 묶여 있지만 강력합니다. 원하는 내용은 다음과 같습니다.

CurrentNode.Append(StorageFromXML('<Node>Content</Node>')); 

한 줄의 코드.

+0

감사합니다. 그것은 훌륭하게 간단한 접근 방식입니다, 불행히도 TXMLDocument 나 MSXML로 직접 제한됩니다. 다른 생각? – sse

+0

해결책을 찾았습니다. 그것은 유감스럽게도 귀하의 경우에만 가능한 방법입니다. Vanila XML은 작동하기 매우 어색하기 때문에 SimpleStorage를 만들었습니다. 내가 그것을 확장하고 거기에 대한 모든 구조화 된 스토리지와 호환되도록 계획하고 약간의 시간을 갖습니다 :) – Runner