以下是示例xml,
<?xml version="1.0" encoding="utf-8"?>
<UsersList>
<User>
<Name>sam&Tim</Name>
<Address>21, bills street, CA</Address>
<Issues>"Issues1", "Issues2"</Issues>
</User>
</UsersList>
C#:
string xml = System.IO.File.ReadAllText(@"E:\Sample.xml");
xml = System.Text.RegularExpressions.Regex.Replace(xml, "<(?![_:a-z][-._:a-z0-9]*\b[^<>]*>)", "<");
XDocument doc = XDocument.Parse(xml);
我需要转换特殊字符(&lt;,&gt;,“,”和&amp;),我正在使用上面的正则表达式。但是解析方法会抛出错误。任何帮助请如何解决问题
答案 0 :(得分:0)
查看您当前的代码如此转换XML
<?xml version="1.0" encoding="utf-8"?>
<UsersList>
<User>
<Name>sam&Tim</Name>
<Address>21, bills street, CA</Address>
<Issues>"Issues1", "Issues2"</Issues>
</User>
</UsersList>
而Parse看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<UsersList>
<User>
<Name>sam and Tim</Name>
<Address>21, bills street, CA</Address>
<Issues>"Issues1", "Issues2"</Issues>
</User>
</UsersList>
因此您不应将<
转换为<
,但XML包含sam&amp; Tim不允许您解析它。因此你可以使用
xml = xml.Replace("&", " n ");//n or and or some other char or string you want
而不是
xml = System.Text.RegularExpressions.Regex.Replace(xml, "<(?![_:a-z][-._:a-z0-9]*\b[^<>]*>)", "<");
希望这可以帮助你解析它。
答案 1 :(得分:0)
您可以试试:
string xml = System.IO.File.ReadAllText(@"E:\Sample.xml");
xml = ReplaceXMLEncodedCharacters(xml)
public string ReplaceXMLEncodedCharacters(string input)
{
const string pattern = @"&#(x?)([A-Fa-f0-9]+);";
MatchCollection matches = Regex.Matches(input, pattern);
int offset = 0;
foreach (Match match in matches)
{
int charCode = 0;
if (string.IsNullOrEmpty(match.Groups[1].Value))
charCode = int.Parse(match.Groups[2].Value);
else
charCode = int.Parse(match.Groups[2].Value, System.Globalization.NumberStyles.HexNumber);
char character = (char)charCode;
input = input.Remove(match.Index - offset, match.Length).Insert(match.Index - offset, character.ToString());
offset += match.Length - 1;
}
return input;
}
答案 2 :(得分:0)
您的问题是您的原始XML 不是有效的XML文档,因为它包含未转义的&符号(&#39;&amp;&#39;),{{{ 3}}说
&符号(&amp;)和左尖括号(&lt;)不得以字面形式出现,除非用作标记分隔符,或用于注释,处理指令或CDATA部分。
要使其有效,您必须使用&amp; amp而不是文字&amp ;.试图&#34;纠正&#34;在一般情况下,这是不实际的,也是一个完全糟糕的主意,因为你无法确定,在XML和代表文字和文字以及它是XML实体的一部分。如果可以明确地区分这些用法,那么该规则可以嵌入到XML解析器中,我们就不必处理它。
文档的有效,符合标准的表示形式
<?xml version="1.0" encoding="utf-8"?>
<UsersList>
<User>
<Name>sam&Tim</Name>
<Address>21, bills street, CA</Address>
<Issues>"Issues1", "Issues2"</Issues>
</User>
</UsersList>