Struct转换为xml(Swift)

时间:2016-08-30 09:15:07

标签: ios swift

我从javascript收到xml并将其解析为struct。

PHP_FUNCTION(test_string)
{    
   char *arg = NULL;
   int arg_len, len;
   char string[256];

   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
       return;
   }

   len = sprintf(string, "String:%s", arg);
   RETURN_STRINGL(arg, arg_len); 
}

如何将此结构转换回xml以传递给javascript?

1 个答案:

答案 0 :(得分:0)

从你的代码我不知道folderDetail类型是什么样的,但我们假设它是这样的:

struct folderDetail {
    var desc:String
    var value:String
}

我也不知道您的XML模式是什么,但我们假设它是这样的:

<?xml version="1.0" encoding="UTF-8"?>
    <gcrInfoStruct>
        <folderView>Folder View String</folderView>
        <actionType>Action Type String</actionType>
        <isProtocolReview>True or False</isProtocolReview>
        <folder>
            <folder1desc>folder1value</folder1desc>
            <folder2desc>folder2value</folder2desc>
        </folder>
    </gcrInfoStruct>"

如果我猜测正确的行然后生成XML,我们只需要生成一个匹配基于结构的模式的字符串,例如。

extension gcrInfoStruct {
    func xml() -> String {
        var string = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><gcrInfoStruct><folderView>\(folderView)</folderView><actionType>\(actionType)</actionType><isProtocolReview>\(isProtocolReview)</isProtocolReview><folder>"
        for i in self.folder {
            string.appendContentsOf("<\(i.desc)>\(i.value)</\(i.desc)>")
        }
        string.appendContentsOf("</folder></gcrInfoStruct>")
        return string
    }
}

要实现我们会做这样的事情:

var gcr = gcrInfoStruct()
// update properties
let xml = gcr.xml()

但是如果我们想将XML作为NSData返回,那么我们将添加这些额外的代码:

extension gcrInfoStruct {
    func xmlData() -> NSData? {
        return self.xml().dataUsingEncoding(NSUTF8StringEncoding)
    }
}

并实施我们会做这样的事情:

var gcr = gcrInfoStruct()
// update properties
let data = gcr.xmlData()

可能folderDetail不仅仅是一对字符串,或者XML模式有所不同,但希望有足够的资源可以帮助您入门。