gpt4 book ai didi

c# - 来自 WebService 的未净化 XML,如何净化

转载 作者:行者123 更新时间:2023-11-30 21:59:41 27 4
gpt4 key购买 nike

我收到来自 Web 服务的 “XML” 响应,该响应未经过清理。这意味着它包含非法字符特殊字符html标签十六进制

净化此响应的最佳方法是什么?

这是服务中的一个 Xml 示例。

<root>
<response>
<type>E</type>
<code>CMNE_00034</code>
<source>CMNQ3030</source>
<message>some valid message here.</message>
<detail>Error details here

line 114: endif
line 115: edit
line 116: else
> line 117: call LP_ACCEPT()
line 118: return ($status)
line 119: endif
line 120: done<end of module> // invalid here

at CMNQ3030.EXEC line 117: call LP_ACCEPT()
at GPCSY_RUN line 5: activate INSTANCENAME."EXEC"( )
at CSYV1000.LOGON line 159: call GPCSY_RUN()
</detail>
</response>
</root>

我尝试了很多东西,从创建一个具有设置的 XmlReader 开始,就像这样。

public XDocument CreateXmlDocument(string content)
{
using (var reader = XmlReader.Create(new StringReader(content), CreateXmlReaderSettings()))
{
return XDocument.Load(reader);
}
}

private static XmlReaderSettings CreateXmlReaderSettings()
{
return new XmlReaderSettings { CheckCharacters = false };
}

要从 XmlDocument 更改为 XDocument 并在实际读取之前使用 Encoding.UTF8.GetBytes

最佳答案

不太可能 XMLReader , XDocument .NET 中的基础设施将友好地接受阅读和解析格式错误的 XML 的要求。

我建议在将 XML 加载到 XML 对象之前对其进行预处理。

在上面的例子中,Web 服务似乎在 <detail>...</detail> 中返回错误消息真正应该像这样包装在 CDATA 中的元素:

<root>
<response>
<type>E</type>
<code>CMNE_00034</code>
<source>CMNQ3030</source>
<message>some valid message here.</message>
<detail><![CDATA[
Error details here

line 114: endif
line 115: edit
line 116: else
> line 117: call LP_ACCEPT()
line 118: return ($status)
line 119: endif
line 120: done<end of module> // invalid here

at CMNQ3030.EXEC line 117: call LP_ACCEPT()
at GPCSY_RUN line 5: activate INSTANCENAME."EXEC"( )
at CSYV1000.LOGON line 159: call GPCSY_RUN()
]]>
</detail>
</response>
</root>

您应该能够非常快速地组合一个解析器来查找、提取和包装 <detail> 末尾之间的文本。标记和 </detail> 的开始<[CDATA[ 内的标签和 ]]>标签。

当然,您服务的 XML 中可能还有其他字段也包含字符串数据或格式错误的字符等,您可能需要查找这些字符并将其替换为正则表达式等。

更正后,您应该可以毫无困难地将干净的 XML 加载到 XMLDocuments/XDocuments 等中。

HTH.

关于c# - 来自 WebService 的未净化 XML,如何净化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29092593/

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