Преобразование XML в Json с данными строки HTML - PullRequest
0 голосов
/ 27 октября 2018

У меня есть XML-документы, которые я пытаюсь преобразовать в Json, но некоторые строковые поля содержат теги HTML (из копирования / вставки текстовых полей из документов Word).Исходный XML выглядит следующим образом:

<my:Request_Description>
    <html xml:space="preserve" xmlns="http://www.w3.org/1999/xhtml">
        <div>test</div>
    </html>
</my:Request_Description>

Когда вызывается JsonConvert.SerializeXmlNode, Json заканчивается следующим образом:

"Request_Description": {
    "html": {
        "@xml:space": "preserve",
        "@xmlns": "http://www.w3.org/1999/xhtml",
        "#significant-whitespace": [
            "\r\n      ",
            "\r\n"
        ],
        "div": "test"
    }
}

Я пытался просто объявить поле как строку, но когдапри вызове deserializeobject ошибка Unexpected character encountered while parsing value.

Есть ли что-то, что я должен сделать на serializexmlnode, чтобы результат Json был другим?Или я могу что-то сделать с десериализованным объектом, чтобы он игнорировал тег HTML?

В идеале json должен выглядеть примерно так, как показано ниже, но я предполагаю, что для кавычек необходимо будет добавить некоторые escape-символы.Суть в том, что теги HTML НЕ обозначают отдельный узел, а вместо этого являются частью значения для узла.Я начал изучать XSLT и подумал, что это может быть вариантом.

{
    "Request_Description": "<html xml:space="preserve" xmlns="http://www.w3.org/1999/xhtml"><div>test</div></html>"
}

1 Ответ

0 голосов
/ 04 ноября 2018

Перешел на использование XDocument, и этот код работал.

    XElement req_desc = newxdoc.Root.Element("Request_Description");
    if (req_desc != null)
    {
        XElement replacenode = new XElement(req_desc.Name, req_desc.Value);
        req_desc.Parent.Add(replacenode);
        req_desc.Remove();
    }
...