【问题标题】:C# xml schema deserialization with html part as string将 html 部分作为字符串的 C# xml 模式反序列化
【发布时间】:2019-02-05 13:50:50
【问题描述】:

我的 xml 看起来像这样:

<document>
    <body>
        <p>
            <text>asdasdasdasd</text>
        </p>
        <text>  </text>
        <p>
            <text>Bl abloa blasdasdasd</text>
        </p>
    </body>     
</document>

所以我想要做的是将正文元素解析为字符串。

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

我已经尝试过 [XmlText] 和不同的属性,例如 [XmlText(Type = typeof(string))]

我正在尝试将其直接作为控制器方法中的参数:

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

如果 SearchResultDataContract 是文档对象。

但我还没有找到任何解决方案。

【问题讨论】:

  • 你想要整个 &lt;body&gt;....&lt;/body&gt; 节点作为字符串还是只想要 &lt;text&gt; 节点在里面?
  • 最简单的方法是将整个主体节点作为字符串 :) @er-mfahhgk

标签: c# xml xml-serialization


【解决方案1】:
[XmlRoot(ElementName = "document")]
public class Document
{
    [XmlElement("body")]
    public XmlElement Body { get; set; }
}

应该有效,只要我们谈论的是 xhtml,而不是 html。你不能直接处理string,AFAIK - 编码器不会相信你的 xml 总是格式正确的 - 但它相信XmlElement。如果需要,您始终可以在两者之间添加一些填充物。

【讨论】:

  • 谢谢!我已经尝试这样做几个小时了!很好的解决方案,我可以从 xmlelement 获取 innerXml 以将其作为字符串获取。谢谢:)
  • 嗯,outerXml 似乎只给了我第一个节点“

    ”,而不是正文中的其他节点......你知道为什么吗?

  • @DanielGustafsson 哦,天哪,这很烦人;但我想这是有道理的......我......在这种情况下没有好的解决方案;我会删除这个答案
  • 哦不 :( 还是谢谢!
【解决方案2】:

我设法通过创建自己的反序列化扩展来解决这个问题: Deserialize element value as string although it contains mixed content

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多