【问题标题】:Set XML as Value of XElement [duplicate]将 XML 设置为 XElement 的值 [重复]
【发布时间】:2016-01-20 10:03:47
【问题描述】:

我的方法接收一个 XML 字符串作为输入,我需要使用 XElement 将此 XML 字符串放入 XML 信封中:

input:                     <hello>Hello!</hello>
expected result: <envelope><hello>Hello!</hello></envelope>

问题在于这段代码:

string xmlHello = "<hello>Hello!</hello>";
XElement xelem = new XElement("envelope", xmlHello);

转义所有&lt;&gt;,因此结果是:

<envelope>&lt;hello&gt;Hello!&lt;/hello&gt;</envelope>

有什么方法可以禁用XElement 构造函数的这种行为,以便能够接受 XML 作为值?输入字符串可能非常大,所以我想避免解析它。

【问题讨论】:

  • 为什么需要禁用转义这个值?如果它包含&lt;/envelope&gt; 子字符串,那么潜在的情况呢?如果不转义,它将破坏您的 xml。
  • @AndyKorneyev 你是对的,这将是一个问题。但是,我检查输入字符串是否遵循可能的 XSD 模式之一,因此不存在 &lt;/envelope&gt; 子字符串的风险。
  • @AndyKorneyev 不幸的是,这个检查是由系统的不同模块完成的,所以我的方法没有接收到解析的 XML,只是一个纯字符串。
  • @AndyKorneyev 谢谢,我错过了!这个问题中的XRaw 可能就是我要找的!

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


【解决方案1】:

正如 cmets 中提到的,这不能直接完成,因为 API 无法知道您的文本实际上是格式正确的 XML,除非您向它传递它知道是 XML 元素的东西。

所以你需要做的是首先解析你的 XML:

string xmlHello = "<hello>Hello!</hello>";

var hello = XElement.Parse(xmlHello);

var envelope = new XElement("envelope", hello);

导致:

<envelope>
  <hello>Hello!</hello>
</envelope>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-24
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多