我正在使用XmlSerializer来反序列化配置文件。我希望能够将Xml元素的子内容提取到字符串字段中。这个子内容可以是xml本身。
一个简单的例子:
public class Configuration
{
[XmlAttribute]
public string MyAttribute { get; set; }
[XmlText]
public string Content { get; set; }
}
我正在尝试解析以下内容:
<Configuration MyAttribute="foo">
<SomeOtherXml />
</Configuration>
我希望将Content属性设置为"<SomeOtherXml />"
,但我似乎无法使其工作。我不想将内容封装在CDATA或类似内容中。
这可能,还是我需要手动处理配置文件的解析?
谢谢
答案 0 :(得分:1)
可以使用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() { }
}
希望这有帮助。