public static void WriteEscapedXmlString()

in src/log4net/Util/Transform.cs [49:99]


  public static void WriteEscapedXmlString(XmlWriter writer, string textData, string invalidCharReplacement)
  {
    writer.EnsureNotNull();
    string stringData = MaskXmlInvalidCharacters(textData, invalidCharReplacement);
    // Write either escaped text or CDATA sections

    int weightCData = 12 * (1 + CountSubstrings(stringData, CdataEnd));
    int weightStringEscapes = 3 * (CountSubstrings(stringData, "<") + CountSubstrings(stringData, ">")) + 4 * CountSubstrings(stringData, "&");

    if (weightStringEscapes <= weightCData)
    {
      // Write string using string escapes
      writer.WriteString(stringData);
    }
    else
    {
      // Write string using CDATA section

      int end = stringData.IndexOf(CdataEnd);

      if (end < 0)
      {
        writer.WriteCData(stringData);
      }
      else
      {
        int start = 0;
        while (end > -1)
        {
          writer.WriteCData(stringData.Substring(start, end - start));
          if (end == stringData.Length - 3)
          {
            start = stringData.Length;
            writer.WriteString(CdataEnd);
            break;
          }
          else
          {
            writer.WriteString(CdataUnescapableToken);
            start = end + 2;
            end = stringData.IndexOf(CdataEnd, start);
          }
        }

        if (start < stringData.Length)
        {
          writer.WriteCData(stringData.Substring(start));
        }
      }
    }
  }