Согласно этой проблеме, она будет исправлена в Terraform v 0.12 https://github.com/hashicorp/terraform/issues/10876
В качестве обходного пути можно использовать внешний источник данных для возврата тегов, что-то вроде этого Python Gist прервано разбором Terraform возвращенного объекта JSON: (
You need to properly escape the text. You don't say what language you're using, but generally: you build a DOM, create a Text node that contains your "inner" XML, and then serialize that DOM. The serializer will handle escaping for you.
The key point here is use a serializer to produce your output. Don't simply write strings, because you're all but guaranteed to produce something that's not well-formed XML.
When you escape the ending angular bracket of the inner CDATA, most XML parsers will not complain about the well-formedness of your XML. Using this "workaround", you should be able to nest multiple CDATA sections.
Something like:
<?xml version="1.0"?>
<SomeData>
<![CDATA[
<SomeMoreData>
<![CDATA[
yeah, this trick rocks! ...
]]>
</SomeMoreData>
]]>
</SomeData>
Note that the inner CDATA has its ending ">" escaped as >
.
Попробуйте использовать XInclude вместо попытки встроить XML-документ в другой. Атрибут XInclude parse = "text" заставит XML обрабатываться как текст, а не как разметка.
Одно простое решение - у вас могут быть смежные секции CDATA.
совпадает с
. Следовательно, вы можете иметь ]]>
, ]]>
закрывающий тег, разделенный на два CDATA
разделы.
Вы можете сделать это, просто добавив документ (без его объявления <? Xml
) в качестве дочернего для какого-то родителя. SOAP делает это - у него есть элемент
, который может содержать любое xml-сообщение, которое вы хотите отправить.
SOAP определяет XSD следующим образом:
<xs:element name="Body" type="tns:Body" />
<xs:complexType name="Body">
<xs:sequence>
<xs:any namespace="##any" minOccurs="0"
maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax">
</xs:anyAttribute>
</xs:complexType>