从有效XML中获取内容后,“解析EntityName时出错”

问题描述 投票:0回答:3

我正在使用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

c# linq-to-xml
3个回答
0
投票

当我抓住我想用来构建另一个Xml字符串的xml内容时,我使用(string)i.Element("field"),这就是将我的Xml转换为字符串。我的下一个Xml Parsing不再将它识别为元素,所以我在阅读我的元素之前不使用(字符串)解决了这个问题,只是i.Element("field")这个有效。


0
投票

听起来你有这样的事情:

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

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

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

然后你会得到这样的无效XML:

<Foo>A & B</Foo>

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


0
投票

因此,在这个问题花了好几个小时之后:事实证明,如果你的xml字符串中有一个符号符号(“&”)或任何其他XML转义字符,那么在尝试读取XML时它总是会失败。要解决此问题,请使用其转义字符串格式替换特殊字符

 YourXmlString = YourXmlString.Replace("'", "&apos;").Replace("\"", "&quot;").Replace(">", "&gt;").Replace("<", "&lt;").Replace("&", "&amp;");
© www.soinside.com 2019 - 2024. All rights reserved.