【问题标题】:How to add child element to XElement as a decoded string?如何将子元素作为解码字符串添加到 XElement?
【发布时间】:2012-07-15 20:39:17
【问题描述】:

我想通过这个测试。我应该使用什么来代替 Add 方法?

[TestMethod]
public void AddContentWithoutEncoding()
{
   var element = new XElement("Parent");

   element.Add("<Son>5</Son>");

   Assert.IsTrue(element.ToString() == "<Parent><Son>5</Son></Parent>");
}

使用当前的方法element.ToString() = "&lt;Parent&gt;&amp;lt;Son&amp;gt;5&amp;lt;/Son&amp;gt;&lt;/Parent&gt;",这显然是对标签内容进行编码。

我有一个带有标签的大常量字符串,我需要将其添加到 XElement(因为我更频繁地使用它)。并且想要使用比HttpUtility.HtmlDecode 更聪明的解决方案 - 只需添加解码后的字符串,而不是在添加后解码整个结果。

谢谢!

【问题讨论】:

    标签: c# .net xml linq-to-xml xelement


    【解决方案1】:

    试试,

    var element = new XElement("Parent");
    foreach(string xml in list)
        element.Add(XElement.Parse(xml));
    

    您可能还想在您的 Assert 中...

    Assert.IsTrue(element.ToString(SaveOptions.DisableFormatting) == ...
    

    【讨论】:

    • :) 很明显。我不想使用这种方法,因为我需要添加大量常量标签(~100)并且我不想为所有这些标签创建 XElement。
    • 举一个你的字符串/数组的例子,以便我们有一些工作。
    • 如果你有一个字符串标签列表/数组,我调整了可能对你有用的答案。
    • 想象像“40...345 ...3Tag>这样的字符串........" 具有不同的继承级别
    • 我只有一个带有元素的字符串,而不是元素。
    【解决方案2】:

    你可以做一个XElement.Parse,然后像这样添加:

    var element = new XElement("Parent");
    
    element.Add(XElement.Parse("<Sone>5</Sone>"));
    
    Console.WriteLine(element.ToString(SaveOptions.DisableFormatting));
    

    这给了我你正在寻找的输出。

    【讨论】:

    • Parse 是否比解码结果更好?
    • @ChuckSavage 在问题中添加子标签,然后解码结果 - HttpUtility.HtmlDecode(element.ToString())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多