如果我正在处理几种标准 xml格式,那么将它们封装在C#3.5中的最佳做法是什么?我想最终得到与System.ServiceModel.Syndication命名空间类似的东西。
封装ADF 1.0 XML standard的类就是一个例子。它有主要的XML根节点,6个子元素,其中4个是必需的IIRC,几个必需的和可选的元素和属性在树下面。我希望这个类至少可以创建所有必需部分的XML,直到完整的XML表示。 (有道理)。
使用LINQ 4 XML和扩展类等等,必须有一些关于快速生成类结构以供使用的想法。是?没有? :)
我不确定我是否提供了足够的细节来获得正确的答案,但我现在愿意接受想法。
TIA
答案 0 :(得分:0)
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);
}
答案 1 :(得分:-2)
为什么不按照Syndication命名空间中的SyndicationFeed对象的模式进行操作?创建一个类,该类将Uri接收到xml文档或仅接收文档片段。
然后根据您的标准解析文档(如果您愿意,可以使用LinqToXml进行解析,但如果您对它们感到满意,则regEx可能会更快)。当文档未通过规范规则时,适当地抛出异常或跟踪错误。
如果文档通过了解析步骤,则将文档的各个部分分解为对象的公共getter属性。然后将完全水合的物体返回给消费者使用
似乎很直接给我。这就是你想要的东西,还是你在寻找更多的东西?