【问题标题】:Creating something similar to System.ServiceModel.Syndication using .NET 3.5使用 .NET 3.5 创建类似于 System.ServiceModel.Syndication 的东西
【发布时间】:2011-01-20 06:59:51
【问题描述】:

如果我要处理几种 standard xml 格式,将它们封装在 C# 3.5 中的最佳实践方式是什么?我想最终得到类似于 System.ServiceModel.Syndication 命名空间的东西。

封装ADF 1.0 XML standard 的类就是一个例子。它具有主要的 XML 根节点、6 个子元素,其中 4 个是必需的 IIRC,还有几个必需的和可选的元素和属性在树的下方。我希望该类至少为所有必需的部分创建 XML,一直到完整的 XML 表示。 (有道理)。

对于 LINQ 4 XML 和扩展类等,必须有一些关于快速生成类结构以供使用的想法。是的?不? :)

我不确定我是否提供了足够的细节来得到一个正确的答案,但我现在愿意接受想法。

TIA

【问题讨论】:

    标签: c# xml .net-3.5


    【解决方案1】:

    XML 序列化似乎是一个不错的方法。您甚至可以使用 xsd.exe 自动生成类...


    编辑

    请注意,该工具生成的类名通常不是很方便,因此您可能需要重命名它们。您可能还想将 T 的数组更改为 List<T>,以便您可以轻松地在需要的地方添加项目。

    假设根元素的类名为 ADF,您可以按如下方式加载 ADF 文档:

    ADF adf = null;
    XmlSerializer xs = new XmlSerializer(typeof(ADF));
    using (XmlReader reader = XmlReader.Create(fileName))
    {
        adf = (ADF)xs.Deserialize(reader);
    }
    

    并保存它:

    ADF adf = ...; // create or modify your document
    ...
    XmlSerializer xs = new XmlSerializer(typeof(ADF));
    using (XmlWriter writer = XmlWriter.Create(fileName))
    {
        xs.Serialize(writer, adf);
    }
    

    【讨论】:

    • 很酷的工具,谢谢。我已经生成了我的类,现在正试图找出使用它们的正确方法。有方便的样品吗?
    • 谢谢!我会玩这个,但它似乎回答了我的问题。
    【解决方案2】:

    为什么不遵循 Syndication 命名空间中的 SyndicationFeed 对象的模式?创建一个将 Uri 接收到 xml 文档或仅接收文档片段的类。

    然后根据您的标准解析文档(如果您愿意,可以使用 LinqToXml 完成此解析,但如果您对它们感到满意,regEx 可能会更快)。当文档未通过规范规则时,适当地抛出异常或跟踪错误。

    如果文档通过了解析步骤,则将文档的各个部分分解为对象的公共 getter 属性。然后将完全水合的物体返还给消费者使用

    对我来说似乎很简单。这是您所追求的,还是您正在寻找更多的东西?

    【讨论】:

    • 是的,正则表达式对于这类事情来说绝对是个坏主意......无论如何,.NET 为读取 XML 提供了大量支持
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2020-09-28
    相关资源
    最近更新 更多