gpt4 book ai didi

C# 如何反序列化嵌入在文本中的 xml 标记?

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:11 24 4
gpt4 key购买 nike

我正在尝试使用 XmlSerializer 反序列化 .NET 的 XML 文档注释的输出。作为引用,xml 文档的输出如下所示:

<?xml version="1.0"?>
<doc>
<assembly>
<name>Apt.Lib.Data.Product</name>
</assembly>
<members>
<member name="P:MyNamespace.MyType.MyProperty">
<summary>See <see cref="T:MyNamespace.MyOthertype"/> for more info</summary>
</member>
...
</members>
</doc>

我用来生成序列化程序的对象是:

    [XmlRoot("doc")]
public class XmlDocumentation
{
public static readonly XmlSerializer Serializer = new XmlSerializer(typeof(XmlDocumentation));

[XmlElement("assembly")]
public AssemblyName Assembly { get; set; }
[XmlArray("members")]
[XmlArrayItem("member")]
public List<Member> Members { get; set; }

public class AssemblyName
{
[XmlElement("name")]
public string Name { get; set; }
}

public class Member
{
[XmlAttribute("name")]
public string Name { get; set; }
[XmlElement("summary")]
public string Summary { get; set; }
}
}

问题是当序列化程序遇到嵌入的 see cref 标签时。在这种情况下,序列化程序会抛出以下异常:

System.InvalidOperationException : There is an error in XML document (147, 27). ----> System.Xml.XmlException : Unexpected node type Element. ReadElementString method can only be called on elements with simple or empty content. Line 147, position 27.

如何在反序列化过程中将摘要标签的全部内容捕获为字符串?

最佳答案

cref 标签本身包含非法字符。具体来说,<、> 不能嵌入到 XML 元素的内容中。您应该在序列化或反序列化之前清理字符串。

如果您需要能够对特定字符的转义或替换方式应用特定规则,您可以这样做:

    string ScrubString(string dirty)
{
char[] charArray = dirty.ToCharArray();
StringBuilder strBldr = new StringBuilder(dirty.Length);

for (int i = 0; i < charArray.Length; i++)
{
if(IsXmlSafe(charArray[i]))
{
strBldr.Append(charArray[i]);
}
else
{
//do something to escape or replace that character.
}
}
retrun strBldr.ToString();
}


bool IsXmlSafe(char c)
{
int charInt = Convert.ToInt32(c);

return charInt == 9
|| charInt == 13
|| (charInt >= 32 && charInt <= 9728)
|| (charInt >= 9983 && charInt <= 55295)
|| (charInt >= 57344 && charInt <= 65533)
|| (charInt >= 65536 && charInt <= 1114111);
}

您还可以使用此处的一些方法使用正则表达式删除任何非法字符:

Invalid Characters in XML

关于C# 如何反序列化嵌入在文本中的 xml 标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com