gpt4 book ai didi

c# - XElement.Value 正在从内容中剥离 XML 标签

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:32 25 4
gpt4 key购买 nike

我有以下 XML:

<Message>
<Identification>c387e36a-0d79-405a-745c-7fc3e1aa8160</Identification>
<SerializedContent>
{"Identification":"81d090ca-b913-4f15-854d-059055cc49ff","LogType":0,"LogContent":"{\"EntitiesChanges\":\"
<audit>
<username>acfc</username>
<date>2015-06-04T15:15:34.7979485-03:00</date>
<entities>
<entity>
<properties>
<property>
<name>DepId</name>
<current>2</current>
</property>
<property>
<name>FirstName</name>
<current>camila</current>
</property>
</properties>
</entity>
</entities>
</audit>\",\"FeatureName\":\"Adicionar Cliente\",\"Operations\":0,\"MachineNameOrigin\":\"VERDE\"}"}
</SerializedContent>
</Message>

和这段代码:

[HttpPost]
[ActionName("Message")]
public HttpResponseMessage MessageListener()
{
var requestString = Request.Content.ReadAsStringAsync().Result;

try
{
var xdoc = XDocument.Parse(requestString);

var xSerializedContent = xdoc.Root.Element("SerializedContent");

var serializedContent = xSerializedContent.Value;

}
catch (XmlException e)
{
return CreateHttpResponseMessage("Invalid XML. " + e.Message);
}
catch (Exception e)
{
return CreateHttpResponseMessage(e.Message);
}
}

serializedContent来自 xSerializedContent.Value这是:

{  
"Identification":"81d090ca-b913-4f15-854d-059055cc49ff",
"LogType":0,
"LogContent":"{\"EntitiesChanges\":\"acfc2015-06-04T15:15:34.7979485-03:00DepId2FirstNamecamila\",\"FeatureName\":\"Adicionar Cliente\",\"Operations\":0,\"MachineNameOrigin\":\"VERDE\"}"
}

我们可以看到 <SerializedContent>是一个 JSON,在 JSON 里面我有另一个 XML EntitiesChanges . 如何避免从中移除XML标签<SerializedContent>

预期结果:

{  
"Identification":"81d090ca-b913-4f15-854d-059055cc49ff",
"LogType":0,
"LogContent":"{\"EntitiesChanges\":\"<audit><username>acfc</username><date>2015-06-04T15:15:34.7979485-03:00</date><entities><entity><properties><property><name>DepId</name><current>2</current></property><property><name>FirstName</name><current>camila</current></property></properties></entity></entities></audit>\",\"FeatureName\":\"Adicionar Cliente\",\"Operations\":0,\"MachineNameOrigin\":\"VERDE\"}"
}

最佳答案

正如其他人所说,这种格式真的很糟糕,一旦嵌入在 JSON 中的 XML 包含双引号(因为在 JSON 中它们将被编码为 \" ,这将使 XML 无效) ). JSON 确实应该作为 CDATA 嵌入。

现在,假设您无法控制格式,您需要阅读 <SerializedContent> 的“内部 XML”元素。没有开箱即用的支持,但您可以轻松创建一个扩展方法来执行此操作:

static class XmlExtensions
{
public static string GetInnerXml(this XNode node)
{
using (var reader = node.CreateReader())
{
reader.MoveToContent();
return reader.ReadInnerXml();
}
}
}

现在您可以使用 .GetInnerXml()而不是 .Value , 它会给你预期的结果。

关于c# - XElement.Value 正在从内容中剥离 XML 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30985368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com