【问题标题】:XML parsing: end tag does not match start tagXML 解析:结束标记与开始标记不匹配
【发布时间】:2020-07-15 02:34:36
【问题描述】:

我有一个 xml。该值来自用户输入。

<Item id="36">
    <name>Electrical and lighting - Exterior lighting</name>
    <note><123comments></note>
    <info id="code">&*&^<samp&*></info>
</Item>

保存 xml 时,出现错误“XML 解析:第 14 行,字符 1868,结束标记与开始标记不匹配”

如何在不替换其他的情况下转换节点内的值?

  • 在 c# 或 js 中

【问题讨论】:

  • sn-p 不是有效的 XML。
  • 您的 XML 无效。 &lt;123comments&gt; 不是元素的有效内容。
  • @KenWhite 和 MrTux:从技术上讲,在 XML 术语中,它不是 well-formed
  • 感谢您的回答,有没有办法更正该值?但它仍然会以相同的方式保存,我是否必须查找每个标签?
  • XML 必须格式正确,否则它不是 XML 并且不能被 XML 库或工具使用。我在回答中展示了一种使您的 XML 格式正确的方法;还有其他人。如果你想要另一种方式,你必须说明你不喜欢我向你展示的方式。例如,您可能会说您希望123comments 成为开始标签;那么,我会说它必须关闭,并且不能以数字开头。对于您可能会询问的任何其他变体,依此类推。但您必须具体说明变化。

标签: xml


【解决方案1】:

您的 XML 已更正为 well-formed

<Item id="36">
    <name>Electrical and lighting - Exterior lighting</name>
    <note>&lt;123comments></note>
    <info id="code">&amp;*&amp;^&lt;samp&amp;*></info>
</Item>

注意事项:

  • &amp;lt; 必须转义为 &amp;lt;,除非它是标签的开头。
  • &amp;amp; 必须转义为 &amp;amp;,除非它开始一个实体。

有关必须在 XML 中转义哪些字符的更多详细信息,请参阅Simplified XML Escaping

【讨论】:

    【解决方案2】:

    我希望这对你有用。

    问题出在 info 和 note 标签内部,值不能有 ,所以你应该尝试对那个标签的值进行编码。

    【讨论】:

    • 你有如何做到这一点的样本吗?我需要查找每个标签来检查值吗?
    • 当然,你应该编码的标签是:note 和 info 标签。因为拥有的值对 xml 无效。也是为了解决这个问题。编码确实值。我个人使用 Base64 编码。在 c# 中,您可以在这些旧答案的示例中实现这一点:stackoverflow.com/a/11743162/10631412
    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2011-07-25
    • 2012-09-29
    • 2020-12-24
    • 1970-01-01
    相关资源
    最近更新 更多