【问题标题】:Special character are giving problem to parse xml using C#特殊字符给使用 C# 解析 xml 带来问题
【发布时间】:2019-11-06 07:22:22
【问题描述】:

我有一个 XML 字符串,我必须在 C# 中解析该 XML(使用 xml.LoadXml())。但在 XML 中有一些特殊字符,如<>&" 等。我已经写了用转义字符替换这些特殊字符。

但问题是 <> 也被 XML 标记的转义字符替换。我该如何解决这个问题?

我只想替换额外的特殊字符,而不是 XML 标记值。

XML:

<?xml version="1.0" encoding="utf-8"?>
<Objects>
    <Object>
        <t2>test<
        </t2>
        <t3>test</t3>
        <s4>76</s4>
        <s7>321</s7>
        <t4>test</t4>
        <t6>test&</t6>
        <t8>NY</t8>
    </Object>
</Objects>

【问题讨论】:

  • 嗯?您是说您的 XML 格式不正确并且您正在尝试纠正它吗?一些匿名 XML 作为示例可能有助于说明您的问题。
  • 示例 XML:"testtest76321testtest&NY " 在上面的 xml t2 标记中有额外的 '
  • 你从哪里得到这个 XML?例如,test&amp;lt; 应该已经在有效 XML 中转义为 test&amp;lt;
  • 等等,您是手动生成此 XML 吗?在这种情况下,这是一个XY problem。您的问题不是修复 XML,而是如何不首先像这样生成它。最简单的选择是将serialize a C# object 转换为 XML。
  • 我真的没有一个好的解决方案。如果用户写入&lt;test/&gt;,然后在您的XML 中变成&lt;t2&gt;&lt;test/&gt;&lt;/t2&gt;,那么&lt;test/&gt; 是有效XML 的一部分,还是应该转义?你怎么知道?

标签: c# xml xml-parsing


【解决方案1】:

尝试使用 '''XPathNavigator''' 来提取它。 如果特殊字符是内部值,则使用“.../@youValue”提取 if。 在这里按照我的例子:https://stackoverflow.com/a/58715025/8916824

【讨论】:

  • 这会修复无效的 XML 吗?
  • 是的,使用 '''LoadXml''' 您将其视为字符串。如果你愿意,我可以给你写一个例子。
  • Example using OP's XML 和您建议使用的XmlDocument
  • 作为 xml 标签?价值? Xml 字符串到底长什么样?
  • 哦,谢谢,我了解第一个解决方案的问题。那么我想你必须像这样使用advancedinstaller.com/user-guide/xml-escaped-chars.html:string xml = "test< t2>test76321test@lt;test&NY "; var doc = new XmlDocument(); doc.LoadXml(xml); var xmlNav= doc.CreateNavigator(); string val= xmlNav.SelectSingleNode("/Objects/Object/t2").Value;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
相关资源
最近更新 更多