采用给定的PHP对象并将其序列化为XML的最佳方法是什么?我正在查看simple_xml,并且我已经用它将xml解析到对象中,但是我尚不清楚它如何以相反的方式工作. 解决方案 看一下梨的 xml_serialializer package.我用它的结果很好.您可以将其数组,对象等喂食,并将它们变成XML.它还具有许多选项,例如选择根节点的名称等. 应该做技巧 其他解决方案 我同意使用梨的xml_serializer,但是如果您想要一些支持具有嵌套属性的对象/数组的简单的东西,则可以使用此. class XMLSerializer { // functions adopted from http://www.sean-barton.co.uk/2009/03/turning-an-array-or-object-into-xml-using-php/ public static function generateValidXmlFromObj
以下是关于 xml-serialization 的编程技术问答
我正在从头开始构建XML文件,并且需要知道HTMLenties()是否会转换所有可能破坏XML文件(以及可能是UTF-8数据)的字符? 这些值将来自Twitter/flickr feed,因此我需要确保 - 解决方案 htmlentities() htmlentities() 不是建立法律XML的保证方法. 使用 htmlspecialchars() htmlspecialchars() 而不是htmlentities()担心.如果您在数据表示和XML文档的编码之间进行编码不匹配,则htmlentities()可能有助于解决/掩盖它们(这样做时会膨胀您的XML大小).我相信最好使您的编码保持一致,然后使用htmlspecialchars(). 另外,请注意,如果您泵送htmlspecialchars()内部XML属性的返回值.也是如此.我建议这样做,因为它可以使您的代码免疫未来使用XML属性的单个引号引起的错误. 编辑:澄清: htmlentitie
我有一个课程会在随着时间的流逝中进行某些版本的变化. 作为我应用程序启动的一部分,该类内部的数据被序列化和应对序列化.我遇到的问题是,如果我通过添加更多属性来更新课程,然后启动应用程序,旧数据无法正确加载. 我要做的是覆盖避免序列化步骤,我不介意手动从XML重建对象,因为我存储了一个版本号,并且可以使用它来递归更新对象的版本. 我可以实现一个接口,还是我可以在某个地方设置的属性,可以做到这一点? 如果您想不出一种做我想做的方法,还有其他选择吗?例如,我正在加载XML版本中可能不存在的属性的默认值. 解决方案 通常用于版本,您可以将OptionalField属性用于可能导致兼容性问题的新添加成员.在序列化期间,如果成员未序列化,则将成员的价值视为null而不是抛出例外. 另外,请看一下IDeserializationCallback.OnDeserialization接口,该接口允许您自定义避难所. 其他解决方案 实施. 其他解决方案 如果是XM
我们在 rails 3 中实现了一个REST API,该使用yajl后端用于json.当前,当序列化超过20行时,它比xml生成json的响应速度要快得多. 我的下一个想法是,Rail 3必须有类似的C图书馆,它将使用libxml或类似于to_xml,就像我们已经使用libyajl for to_json . 迄今为止,我只发现 rti/fastxml project: 有人知道 forpastxml 是否有效(或不使用 rails 3 ? ) 更重要的是,有人知道其他任何方法可以让铁路3做一个更快的render :xml => @search_results? 非常感谢您的任何帮助. 解决方案 几个导轨的测试3个配置选项,通过ab:XmlMini_Nokogiri,XmlMini_Nokogiri,fast_xs. 以下请求以嵌套红宝石哈希的形式返回大约50k的搜索结果,数据来自memcach,因此这里的时间差异是将结果编码为XML或JSON.
我有以下代码 public static object XmlDeserialize(string xml, Type objType) { StringReader stream = null; XmlTextReader reader = null; try { XmlSerializer serializer = new XmlSerializer(objType); stream = new StringReader(xml); // Read xml data reader = new XmlTextReader(stream); // Create reader return serializer.Deserialize(reader); } finally { if(stream != null) stream.Close();
在Java中创建XML文档的最快,最有效的方法是什么?那里有很多图书馆(Woodstox,Xom,Xstream ...),只是想知道是否有人有任何输入.我应该采用代码生成方法(因为XML模式众所周知)吗?还是在运行时间进行反射方法? 编辑了其他信息: 定义明确的XML模式可用,很少更改 要求是将Java对象转换为XML,而不是VICE,反之亦然 成千上万的Java对XML每秒的对象 代码生成,代码复杂性,配置,维护等是较高的性能. 解决方案 如果我要创建一个非常简单的XML内容,我只会坚持使用JDK API,不引入第三方依赖. 因此,对于简单的XML,如果我要映射XML文件到Java class (或Vice-versa),我会选择 jaxb . 请参阅此教程,看看它有多容易. 现在. 如果我要使用恒定方案创建一些更复杂的XML输出,我将使用一些模板引擎, freemarker 也许. 胸膜看起来也不错. 最后. 如果我要非常有效
我们的应用程序正在读取一些XML文件. XML格式是固定的,因此我们可以很容易地使用我使用此代码读取XML文件并将其转换为类: public static T FromXml(this string xml) where T : class { if (string.IsNullOrEmpty(xml)) { return default(T); } XmlSerializer xmlserializer = new XmlSerializer(typeof(T)); XmlTextReader textReader = new XmlTextReader(new StringReader(xml)); textReader.Normalization = false; XmlReaderSettings settings = new XmlReaderSettings(); T valu
我正在对Microsoft Dynamics CRM进行一些实验.您通过Web服务与之互动,我已经对我的项目添加了Web参考. Web服务界面非常丰富,生成的" Reference.cs"是90k LOC. 我正在控制台应用程序中使用Web参考.我经常更改某些东西,重新编译并运行.编译很快,但是新的Web服务参考非常慢,需要大约15-20秒: CrmService service = new CrmService(); 分析表明,所有时间都花在SoaphttpClient Protocol构造函数中. 罪魁祸首显然是XML序列化代码(未包含在上述90K LOC中)是在运行时生成的,然后是在被jit'Ed之前生成的.这发生在构造函数期间.等待在玩耍和尝试时相当沮丧. 我尝试了sgen.exe,ngen和xgenplus的各种组合(这需要几个小时,生成了500MB的附加代码),但无济于事.我已经考虑实施一个Windows服务,该服务很少有CRMService实例准备在需要时
我目前有一个非常奇怪的问题,我似乎无法弄清楚如何解决. 我有一个相当的复杂类型,我正在尝试使用XMLSerializer类序列化.实际上,这正常功能正常,并且类型正确地序列化,但似乎很长时间以来需要很长时间.大约5秒钟,具体取决于对象中的数据. 经过一些分析后,我将问题缩小 - 怪异 - 在调用xmlSerialializer.Serialize时指定XMLRootAttribute.我这样做是为了更改从Arrayof序列化的集合的名称,更有意义.删除参数后,操作几乎即时! 任何想法或建议都非常好,因为我完全对此感到困惑! 解决方案 仅适合任何遇到这个问题的人;在上面的答案和MSDN的示例中,我设法使用以下类解决了此问题: public static class XmlSerializerCache { private static readonly Dictionary cache =
我有一个非常基本的对象模型,该模型正在由system.xml.xmlserialization序列化.我需要使用XMLATTRIBUTEOVERRIDES功能为子元素集合设置XML元素名称. public class Foo{ public List Bars {get; set; } } public class Bar { public string Widget {get; set; } } 使用标准XML序列化器,将其出现为 ... 我需要使用xmloverrideattributes做这个 ... ,但我似乎不能让它重命名集合中的孩子元素...我可以重命名收藏品...我可以重命名root ...不确定我在做
我有一个带有抽象属性的基类: public abstract int ID {get;set;} 现在,我有一个子类,该子类已被XMLSerialized.因此,它具有: [XmlElement("something")] public override int ID { get { //... } set { //... } } 我无法将XMLELEMENT属性移至基础上,因为每个子类都将具有不同的XML元素名称. 现在,当我对此课程进行挑选时,我会收到以下错误: 成员'subclass.id'隐藏 成员" baseclass.id",但 不同的自定义属性. 我该怎么办? 解决方案 通过添加[XmlIgnore]属性,当被覆盖的属性具有[XmlElement]和[XmlAttribute]属性时,衍生类型的序列化和避免序列化起作用. 可以使基类抽象化,以便永远无法实例化并因此序列化或估算化. [Serializable] pub
当我在存储过程下运行时,它会显示错误.在这里,一些特殊的char相关问题,所以我无法生成XML文件,xml格式与Connecting to the database DB_old. ORA-29285: file write error ORA-06512: at "SYS.UTL_FILE", line 148 ORA-06512: at "SYS.UTL_FILE", line 889 ORA-06512: at "DBO_17FEB.EXPOR1", line 60 ORA-06512: at line 6 Process exited. Disconnecting from the database DB_old. ------------------- create or replace PROCEDURE Expor1 ( V_TABLE_NAME IN varchar2 ) AS BEGIN ----- Export table data DECLARE v_file UT
在C#中使用XML序列化时,我使用这样的代码: public MyObject LoadData() { XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyObject)); using (TextReader reader = new StreamReader(settingsFileName)) { return (MyObject)xmlSerializer.Deserialize(reader); } } (以及用于挑选的类似代码). 它需要铸造,不是真的很好.是否有一种直接在.NET框架中使用具有序列化的通用物质的方法?也就是说写类似: public MyObject LoadData() { // Generics here. XmlSerializer xmlSerializer = new XmlSeri
我正在建立一个与第三方接口的库.通信是通过XML和HTTP帖子进行的.那是在起作用. 但是,无论代码使用什么库都不需要了解内部类.我的内部对象使用此方法将其序列化为XML: internal static string SerializeXML(Object obj) { XmlSerializer serializer = new XmlSerializer(obj.GetType(), "some.domain"); //settings XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.OmitXmlDeclaration = true; using (StringWriter stream = new StringWriter()) { using (XmlWriter
我遇到问题,从API获取odata查询的API,当我使用ODATA查询获取XML Datatype或格式时,它给了我 error InvalidDataContractException:键入'Microsoft.aspnetcore.odata.query.wrapper.selectSome`1 [odata_web_api.models.user]'无法序列化.考虑使用DataconTractAttribute属性标记它,并标记您想要使用Datamemberattribute属性序列化的所有成员.另外,您可以确保类型是公共的,并且具有无参数构造函数 - 然后将序列化该类型的所有公共成员,并且不需要属性. 但是没有API上的ODATA查询,一切都很好. 模型 // This file has been auto generated by EF Core Power Tools.
我正在尝试使用一些自定义属性扩展观测值,并序列化.但是,我似乎无法将其序列化.我正在使用.NET 4.0,其中他们修复了观测值的序列化问题,但仍有问题.我的直觉是,在基类而不是我的基础上被称为getObjectData.有什么想法吗? [Serializable] [XmlRoot(ElementName = "MyCollection")] public class MyCollection : ObservableCollection, ISerializable { private string name; void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("Name", Name); } private MyCollection() {
我允许将应用程序数据导出为XML文件,并且我希望能够将一个字段导出到xml是NSData字段.这样做的正确/接受的方式是什么?我应该转换为base64 并将该字符串写入xml? 我希望不使用类别来滚动自己的解决方案,因为对链接问题的接受答案(链接到 matt gallagher的解决方案). 更新 我刚刚发现了 解决方案 我意识到(如我所暗示的),我可以使用 nsproperpylistserialization class,因为-dataWithPropertyList:format:options:error:返回的NSData只是一个UTF-8字符串.这就是我用来序列化的内容: NSData *data = value; NSError *error = nil; NSData *plistData = [NSPropertyListSerialization dataWithPropertyList:data
我有一个使用少量数据的iPhone应用程序. 我想将数据保存在XML格式中,并能够将其加载到Objection-C对象中.我想使用iPhone SDK设施,例如 nspropertylisterialization 或 writeTofile:atomyly:类和方法. nspropertylisterialization Class 提供转换属性的方法 列出与几个的对象 序列化格式.属性清单 对象包括NSDATA,NSSTRING, nsarray,nsdictionary,nsdate和 nsnumber对象. 假设我想保存几个 person 对象(一个家庭),其属性都是 property-list类型.我设法以XML格式保存此保存的唯一通道是通过: // container for person objects NSMutableArray *family = [[NSMutableArray alloc] init]; for (int i = 0; i