Формат XML-строки в дружественную XML-строку с подсветкой - PullRequest
1 голос
/ 01 октября 2019

Я использую это для форматирования XML-строки для печати дружественной XML-строки

public static string PrintXML(string xml)
{
    string result = "";

    MemoryStream mStream = new MemoryStream();
    XmlTextWriter writer = new XmlTextWriter(mStream, Encoding.Unicode);
    XmlDocument document = new XmlDocument();

    try
    {
        // Load the XmlDocument with the XML.
        document.LoadXml(xml);

        writer.Formatting = Formatting.Indented;

        // Write the XML into a formatting XmlTextWriter
        document.WriteContentTo(writer);
        writer.Flush();
        mStream.Flush();

        // Have to rewind the MemoryStream in order to read
        // its contents.
        mStream.Position = 0;

        // Read MemoryStream contents into a StreamReader.
        StreamReader sReader = new StreamReader(mStream);

        // Extract the text from the StreamReader.
        string formattedXml = sReader.ReadToEnd();

        result = formattedXml;
    }
    catch (XmlException)
    {
        // Handle the exception
    }

    mStream.Close();
    writer.Close();

    return result;
}

это работает действительно хорошо. Но у меня есть одна проблема, и я хотел бы выделить часть моего содержимого XML.

Проблема заключается в следующем: моя строка содержит такой заголовок: STP / 00/276 /

так:

string s = ("STP/00/276/<?xml version='1.0' encoding='iso-8859-1'?><RequestResponse><RequestName>GetInfo</RequestName></Params></RequestResponse>")

Как решить эту проблему?

С другой стороны, возможно ли изменить цвет содержимого?

ИтакЯ хотел бы иметь это:

<?xml version='1.0' encoding='iso-8859-1'?>
<RequestResponse>
<RequestName>GetInfo</RequestName>
</Params>
</RequestResponse>

И «GetInfo» должно быть написано красным цветом, например,

1 Ответ

0 голосов
/ 01 октября 2019

Сначала вы можете просто удалить свой заголовок, отформатировать остальное с помощью уже имеющегося кода, а затем добавить заголовок обратно в отформатированный XML. Примерно так:

string s = "STP/00/276/<?xml version='1.0' encoding='iso-8859-1'?><RequestResponse><Params><RequestName>GetInfo</RequestName></Params></RequestResponse>";
int index = s.IndexOf("<?xml");
string header = s.Substring(0, index);
s = s.Substring(index);
s = header + "\r\n" + PrintXML(s);
Console.WriteLine(s);

Вот скрипка .

...