Строка в xmlNode delphi (или как добавить фрагмент xml в TXMLDocument)
У меня есть несколько текстовых строк, которые содержат правильно сформированный XML.
Я хотел бы иметь возможность (1) превратить эти строки в IXMLNodes
затем (2) добавить их к существующему XMLDocument
, Желательно без объявления нового XMLDocument
первый.
Это кажется невозможным?
Есть ли простой способ сделать что-то эквивалентное, хотя? Моей первоначальной мыслью было использовать IXMLNode.XML
(string) и вставьте новые строки. Нет такой удачи как IXMLNode.XML
только для чтения.
Вот пример, если у меня были следующие строки в TStringList
,
<Property Name="Version" RttiType="tkString"></Property>
<Property Name="ShowSubunit" RttiType="tkBoolean"></Property>
И у меня был следующий XML, уже загруженный в TXMLDocument
Как я мог легко добавить две строки выше в 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);
Проверьте SimpleStorage. На данный момент он привязан к OmniXML, но он мощный. То, что вы хотите, будет выглядеть так:
CurrentNode.Append(StorageFromXML('<Node>Content</Node>'));
Одна строка кода.