Строка в 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>'));

Одна строка кода.

Другие вопросы по тегам