【问题标题】:"An error occurred while parsing EntityName" after grabbing content from valid XML从有效 XML 中获取内容后,“解析 EntityName 时发生错误”
【发布时间】:2018-11-02 02:14:21
【问题描述】:

我正在使用 XDocument 读取 XML 字符串

XmlReader reader = XmlReader.Create(new StringReader(xmltext));
        reader.Read();
        XDocument xdoc = XDocument.Load(reader);

然后我抓取一些标签的内容并将它们放在不同字符串的标签中。 当我尝试以与第一个相同的方式加载此字符串时,出现错误“解析 EntityName 时发生错误。第 1 行,位置 344。”。

我认为它应该被正确解析,因为它之前已经被解析过,所以我想我在这里遗漏了一些东西。

我正在读取并复制带有(string)i.Element("field") 的第一个XML 的内容。

我正在使用 .net 4

【问题讨论】:

  • 第 1 行第 344 位是什么?我猜你的编码有问题。
  • 我有一个 & 符号。但我不明白的是,相同的文本在第一个正确解析的 Xml 中。我刚刚抓取了第一个 Xml 标记的相同内容并构建了一个新的 Xml 字符串。
  • 可能编码不同...

标签: c# linq-to-xml


【解决方案1】:

当我获取要用于构建另一个 Xml 字符串的 xml 内容时,我使用 (string)i.Element("field"),这会将我的 Xml 转换为字符串。我的下一个 Xml Parsing 不再将其识别为元素,因此我通过在读取元素之前不使用 (string) 解决了这个问题,只是 i.Element("field") 并且这有效。

【讨论】:

    【解决方案2】:

    听起来你有这样的东西:

    <OriginalDocument>
        <Foo>A &amp; B</Foo>
    </OriginalDocument>
    

    A &amp;amp; B 代表文本 A &amp; B。因此,当您从元素中获取文本时,您将获得字符串“A & B”。如果你然后用它来构建一个像这样的新元素:

    string foo = "<Foo>" + fooText + "</Foo>";
    

    那么你最终会得到这样的无效 XML:

    <Foo>A & B</Foo>
    

    基本上,您不应该以文本形式构建 XML。目前尚不清楚您真正想要实现什么,但您可以很容易地以XElement 形式将一个元素从一个地方复制到另一个地方;您不需要构建一个字符串然后重新解析它。

    【讨论】:

      【解决方案3】:

      所以在这个问题上花了几个小时后: 事实证明,如果您的 xml 字符串中有一个 & 符号 ("&") 或任何其他 XML 转义字符,那么您尝试读取 XML 将始终失败。 要解决此问题,请将特殊字符替换为其转义字符串格式

       YourXmlString = YourXmlString.Replace("'", "&apos;").Replace("\"", "&quot;").Replace(">", "&gt;").Replace("<", "&lt;").Replace("&", "&amp;");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 2010-10-16
        • 2016-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多