【问题标题】:Parse xml with html to through c# web api通过 c# web api 用 html 解析 xml
【发布时间】:2019-01-31 12:44:44
【问题描述】:

这是我的 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 解析为字符串?

【问题讨论】:

    标签: c# xml serialization


    【解决方案1】:

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

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

    【讨论】:

    • 你希望我在哪里这样做?由于如果 xml 与它应该被解析的对象不对应,则该对象不会被解析为控制器方法? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多