MATLAB社区

MATLAB,社区等

更多的XML和MATLAB:控制XML输出

在过去的几个月里,我已经收到了很多关于MATLAB的XML功能的评论,所以我想现在是时候就这个问题再发表几篇文章了。今天是本系列的第4部分,这次将介绍一些局限性xmlwrite

XMLWRITE是MATLAB用于序列化文档元素的函数。只有一个参数,xml内容就被打印到命令窗口。通过两个参数,将数据保存到文本文件中。这个函数没有给你很多空间来定制输出;我们预计大多数MATLAB用户会使用默认值。但是,有时需要对输出进行一些额外的控制。这里的高级概念是,尽管您在MATLAB工作空间中创建了XML文档对象,但输出实际上是由Java序列化器对象控制的,并且不使用文档的所有属性。XMLWRITE为您创建并执行序列化器。要自定义这个过程,您必须使用MATLAB的Java接口自己管理序列化。

特别是,在输出文件中的XML节点上设置的属性是由序列化器设置的,而不是传递给XMLWRITE的DOM对象。我的一些博客评论者和MATLAB Answers的用户遇到了这个限制。例如,请参阅MATLAB Answers帖子:setXmlStandalone错误?我在那篇文章中提出的解决方法,我复制在下面。警告一下,这是Java的高级操作。

docNode = com.mathworks.xml.XMLUtils.createDocument(“AddressBook”);docNode.getDocumentElement.appendChild (docNode.createElement (“b”));docNode.getDocumentElement.appendChild (docNode.createElement (“一个”));不这样做docNode.setXmlStandalone(1)进口javax.xml.transform。*;进口javax.xml.transform.dom。*;进口javax.xml.transform.stream。*;tfactory =TransformerFactory.newInstance;变压器= tfactory.newTransformer;src =DOMSource(docNode);流=java.io.StringWriter;dst =StreamResult(流);%在这里设置值transformer.setOutputProperty (OutputKeys.STANDALONE“是的”);transformer.setOutputProperty (OutputKeys.VERSION“1.1”);transformer.setOutputProperty (OutputKeys.ENCODING“ASCII”);transformer.transform (src, dst);result = char(stream.toString)
结果=  < AddressBook > < / b > < / > < / AddressBook >

如您所见,在这段代码中,使用OutputKeys允许我们控制显示在最终XML文档中的内容。设置的属性docNode将被忽略。在本例中,我使用StringWriter来获取XML的String形式,但是您可以使用FileWriter将其保存到磁盘。

我收到了一些评论,认为这个解决方案不是我们所习惯的友好的MATLAB代码,因此我创建了增强请求,将一些此功能引入XMLWRITE。

本系列的其他文章:

EDIT 2/21/2012:更新javadoc链接

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。