如何将Xml内容反序列化为字符串
问题描述:
我正在使用XmlSerializer来反序列化配置文件。我希望能够将Xml元素的子内容获取到字符串字段中。这个子内容可以是xml本身。如何将Xml内容反序列化为字符串
一个简单的例子:
public class Configuration
{
[XmlAttribute]
public string MyAttribute { get; set; }
[XmlText]
public string Content { get; set; }
}
我试图解析如下:
<Configuration MyAttribute="foo">
<SomeOtherXml />
</Configuration>
我想要的内容属性被设置为"<SomeOtherXml />"
,但我似乎无法得到这个工作。我不想封装CDATA或类似的内容。
这是可能的还是我需要手动处理我的配置文件的解析?
感谢
答
有可能使用XmlSerializer但是需要手工解析,因此它可能并不值得到底。
可能有其他更好的方法来做到这一点,但我发现这样做的方式是让您的Configuration类实现IXmlSerializable接口。
public class Configuration : IXmlSerializable
{
[XmlAttribute]
public string MyAttribute { get; set; }
[XmlText]
public string Content { get; set; }
public void ReadXml(XmlReader reader)
{
if(reader.NodeType == XmlNodeType.Element &&
string.Equals("Configuration", reader.Name, StringComparison.OrdinalIgnoreCase))
{
MyAttribute = reader["MyAttribute"];
}
if(reader.Read() &&
reader.NodeType == XmlNodeType.Element &&
string.Equals("SomeOtherXml", reader.Name, StringComparison.OrdinalIgnoreCase))
{
Content = reader.ReadOUterXml(); //Content = "<SomeOtherXml />"
}
}
public void WriteXml(XmlWriter writer) { }
public XmlSchema GetSchema() { }
}
希望这会有所帮助。
你可以使用正则表达式来解析它,但我猜你已经知道了。 – 2011-02-16 17:07:03