0

我正在使用 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 或类似文件中。

这是可能的还是我需要手动处理我的配置文件的解析?

谢谢

4

1 回答 1

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() { }
}

希望这可以帮助。

于 2011-02-16T18:51:16.747 回答