【问题标题】:Get html tags embedded in xml using linq使用linq获取嵌入在xml中的html标签
【发布时间】:2010-11-17 15:35:35
【问题描述】:

我有一个看起来像这样的基本 xml 文件。

    <root>
     <item>
        <title><p>some title</p></title>
     </item>
    ...
    </root>

我想要的是使用 linq 获取整个标题字符串,包括 xml 的 html 标记并将其显示在 repeater 中。 我可以毫无问题地获得标题,但 &lt;p&gt; 标记正在被剥离。

如果我使用
title = item.Element("title").ToString(),它会以某种方式工作,但我也会得到所有 xml 标签 - 这意味着标题不会显示在 html 中。

我已经尝试使用"&amp;lt;""&lt;" 进行编码,但这样做会使xml 难以阅读。

除了使用 CDATA 和编码之外,还有什么可能的解决方案?

干杯 特里

【问题讨论】:

  • 您会考虑手动解析 XML 吗?

标签: c# html xml linq


【解决方案1】:

从title元素创建一个阅读器并阅读InnerXml:

    static void Main(string[] args)
    {
        string xml = "<root><item><title><p>some title</p></title></item></root>";

        XDocument xdoc = XDocument.Parse(xml);
        XElement te = xdoc.Descendants("title").First();
        using (XmlReader reader = te.CreateReader())
        {
            if (reader.Read())
                title = reader.ReadInnerXml();
        }
    }

【讨论】:

  • 感谢 bruno 的建议,不幸的是它没有奏效。你能给我一个例子,说明我如何将它与我正在使用的 linq select 语句结合起来吗? - 特里
  • 感谢布鲁诺,您为我指明了正确的方向。需要一点时间来适应我的需要,但现在我知道从哪里开始了。
【解决方案2】:

有关如何获取 XElement 的“InnerXml”的一些想法,请参阅 Best way to get InnerXml of an XElement?

【讨论】:

    【解决方案3】:

    XElement x = XElement.Parse(你的 xml);

    var y= x.Descendants("title").Descendants();

    然后迭代 y 以获得标题元素的内容列表。

    顺便说一句,LINQPad (http://www.linqpad.net) 是一个方便的免费工具,用于试用 LINQ-XML。

    【讨论】:

    • 嗨 ebpower,我试过了,但不知何故无法让它工作。感谢 LINQPad 的提示,我完全忘记了它,我已经有一段时间没有使用它了。
    • 嗯 - 我从我的 LINQPad 窗口粘贴。我使用“<p>some title</p>”代替 XElement.Parse 的“your xml”参数。跨度>
    猜你喜欢
    • 1970-01-01
    • 2018-02-24
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2018-07-01
    相关资源
    最近更新 更多