Из-за ошибки PHP в другом продукте я иногда получаю плохо сформированный XML-ответ, например:
<?xml version="1.0" encoding="UTF-8"?>
<customfields>
</customfields>Warning
Router: https://example.com/api/index.php?/Tickets/TicketCustomField/Get
file_put_contents(./__swift/cache/SWIFT_Loader.cache): failed to open stream: Invalid argument (C:/Kayako/support/__swift/library/Loader/class.SWIFT_Loader.php:1630)
Существует ли безопасный метод для очистки этой строки, прежде чем я десериализую ее?
Требование дубликата верное, но связанный дубликат не дает рабочего решения.
Текущее временное решение работает только в том случае, если стартовая строка действительна XML, а прилагаемая ошибка не содержит другого закрывающего тега, который соответствует корневому тегу:
RegexOptions options = RegexOptions.Singleline | RegexOptions.Compiled;
var tidyStreamContents = Regex.Match(streamContents, @"^<\?xml.*?\?>\s*?<(.*?)>.*</(\1)>", options, Regex.InfiniteMatchTimeout).ToString();
Вы можете использовать CsQuery для обработки недопустимого XML как HTML, очистки его и вывода в виде строки для дальнейшей обработки:
using CsQuery;
var cq = CQ.CreateFromFile("input.txt");
var sCleanXML = cq("customfields").RenderSelection;
Вход (содержимое input.txt
):
<?xml version="1.0" encoding="UTF-8"?>
<customfields>
</customfields>Warning
Router: https://example.com/api/index.php?/Tickets/TicketCustomField/Get
file_put_contents(./__swift/cache/SWIFT_Loader.cache): failed to open stream: Invalid argument (C:/Kayako/support/__swift/library/Loader/class.SWIFT_Loader.php:1630)
Выход (значение sCleanXML
):
<customfields> </customfields>
Альтернативой может быть использование XmlReader или HtmlAgilityPack.
>
, несколько наивно, но это может сработать. Рассматривали ли вы возможность связаться со службой поддержки продукта?