使用html解析xml以通过C#Web API

时间:2019-01-31 12:44:44

标签: c# xml serialization

这是我的xml(略有缩短):

<document stored_search_id="11826309" id_site="184569" id_article="86428" hidden="false" position="1" equalgroup="3597146365">
    <unix_timestamp>1548924770</unix_timestamp>
    <header matches="false">
        <text>Mobilstrul för Tele2 - problem ringa 112</text>
    </header>
    <short_header matches="false" length="251" removed="0">
        <text>Mobilstrul för Tele2 - problem ringa 112</text>
    </short_header>
    <summary matches="false">
        <text> Samhälle Kunder i hela landet har rapporterat problem med mobiltelefoni med operatörerna Tele2 och Comviq. Användarna har dålig eller ingen täckning och varken samtal eller internet i mobilen fungerar.</text>
    </summary>
    <short_summary matches="false" length="957" removed="94">
        <text> Samhälle Kunder i hela landet har rapporterat problem med mobiltelefoni med operatörerna Tele2 och Comviq. Användarna har dålig eller ingen täckning och varken samtal eller internet i</text>
    </short_summary>
    <body matches="false">
        <p>
            <text>Enligt Joel Ibson, kommunikationsansvarig på Tele2 började problemen vid tretiden på natten.</text>
        </p>
        <text>  </text>
        <p>
            <text>Det var en omfattande, rikstäckande störning. Den blev snabbt bättre, men det finns fortfarande problem, framför allt i Göteborgsområdet.</text>
        </p>
    </body>     
</document>

这是我想将其解析为的对象:

 [XmlRoot(ElementName = "document")]
public class Document
{
    [XmlElement(ElementName = "unix_timestamp")]
    public long UnixTimestamp { get; set; }

    [XmlElement(ElementName = "header")]
    public Header Header { get; set; }

    [XmlElement(ElementName = "short_header")]
    public ShortHeader ShortHeader { get; set; }

    [XmlElement(ElementName = "summary")]
    public Summary Summary { get; set; }

    [XmlElement(ElementName = "short_summary")]
    public ShortSummary ShortSummary { get; set; }

    [XmlElement(ElementName = "body")]
    public string Body { get; set; }
}

您可以看到我的身体是字符串类型,但在xml中是一些html。

我从文件中发布xml:

   var contents = File.ReadAllText(file);
                var httpContent = new StringContent(contents, Encoding.UTF8, "application/xml");
                var resoponse = await httpClient.PostAsync(uri, httpContent);

                File.Move(file, file.Replace(folderPath, $@"{folderPath}\Done"));

到我的api方法:

[AllowAnonymous]
[HttpPost]
[Route("")]
public async Task SearchResult([FromBody] SearchResultDataContract searchResult)
{

但是每当我将我的身体作为SearchResultDataContract对象的一部分时,它就无法解析xml,因此它将变为null。

所以我想它正在尝试将Body解析为xml而不是字符串/ html,然后如果失败。所以我的问题是,如何将正文html解析为字符串?

1 个答案:

答案 0 :(得分:0)

您可以使用HttpUtility.HtmlEncode()对字符串进行编码,并通过HttpUtility.htmlDecode()将其返回给html

string htmlString = System.Web.HttpUtility.HtmlEncode("<p>Some text</p>");
htmlString = System.Web.HttpUtility.HtmlDecode(htmlString);