【问题标题】:How to create XML format file programatically? [closed]如何以编程方式创建 XML 格式文件? [关闭]
【发布时间】:2013-06-07 07:30:37
【问题描述】:
<?xml version="1.0"?>
<Mytrip>
    <start_time>06/06/2013 09:00:00 AM</start_time>
    <end_time>06/06/2013 09:30:00 AM</end_time>      
    <start_address> 12 NGO, Roseville, Mp</start_address> 
    <start_gps>+40.689060,-74.044636</start_gps>
    <end_address>8 STE stree, Roseville, MP</end_address>
    <end_gps>+42.689060, -72.044636</end_gps>
    <duration>00:00:00:00</duration>
    <label>Roseville Trip</label>
    <route>
        <point>
            <gps>+40.689060,-74.044636</gps>
            <speed>1.2 Miles/Hr</speed>
        </point>
        <point>
            <gps>+41.689060,-74.044636</gps>
            <speed>5.0 Miles/Hr</speed>
        </point>
   </route>
</Mytrip>

我想创建上述格式的 XML 文件。在这一点上,我可以通过多种方式从我的数据库中获取数据。

  

【问题讨论】:

  • 这是为了发送到某个远程服务器吗?任何可以支持 JSON 的机会呢?使用内置类在 iOS 中编码/解码 JSON 很简单。 XML 并不难,但需要更多的工作(没有内置的 XML 编码器,因此您必须编写自己的或使用第三方例程;XML 解析(您承认这里没有这样做,但仍然)需要更多比 JSON 解析更有效)。如果您必须使用 XML,我相信下面的答案会有所帮助。

标签: ios objective-c xcode


【解决方案1】:

正如许多人建议的那样,您可以使用第三方库来做到这一点。有关如何使用 GDataXML 执行此操作的示例。

首先创建适合保存数据的自定义对象。识别节点。这里有两个节点

  1. 旅行

为它们创建模型类。为了简单起见,我把它们都做成了字符串。理想情况下,最好将时间包含为NSDate,将坐标包含为CLLocation,持续时间以秒为单位。

@interface Trip : NSObject

@property (nonatomic, copy) NSString *label;

@property (nonatomic, copy) NSString *start_address;
@property (nonatomic, copy) NSString *end_address;

@property (nonatomic, copy) NSString *start_time;
@property (nonatomic, copy) NSString *end_time;

@property (nonatomic, copy) NSString *start_gps;
@property (nonatomic, copy) NSString *end_gps;

@property (nonatomic, copy) NSString *duration;

@property (nonatomic, strong) NSArray *points;

- (GDataXMLElement *)XMLNode;
- (NSString *)XMLString;

.m 文件

@implementation Trip

- (GDataXMLElement *)XMLNode{

    GDataXMLElement *tripNode = [GDataXMLElement elementWithName:@"Mytrip"];

    GDataXMLElement *startTimeElement = [GDataXMLElement elementWithName:@"start_time" stringValue:self.start_time];
    [tripNode addChild:startTimeElement];
    GDataXMLElement *endTimeElement = [GDataXMLElement elementWithName:@"end_time" stringValue:self.end_time];
    [tripNode addChild:endTimeElement];

    GDataXMLElement *startAddressElement = [GDataXMLElement elementWithName:@"start_address" stringValue:self.start_address];
    [tripNode addChild:startAddressElement];
    GDataXMLElement *endAddressElement = [GDataXMLElement elementWithName:@"end_address" stringValue:self.end_address];
    [tripNode addChild:endAddressElement];

    GDataXMLElement *startGpsElement = [GDataXMLElement elementWithName:@"start_gps" stringValue:self.start_gps];
    [tripNode addChild:startGpsElement];
    GDataXMLElement *endGpsElement = [GDataXMLElement elementWithName:@"end_gps" stringValue:self.end_gps];
    [tripNode addChild:endGpsElement];

    GDataXMLElement *durationElement = [GDataXMLElement elementWithName:@"duration" stringValue:self.duration];
    [tripNode addChild:durationElement];

    GDataXMLElement *labelElement = [GDataXMLElement elementWithName:@"label" stringValue:self.label];
    [tripNode addChild:labelElement];

    GDataXMLElement *routeNode = [GDataXMLElement elementWithName:@"route"];

    for (RoutePoint *point in self.points) {
        GDataXMLElement *pointNode = [point XMLNode];
        [routeNode addChild:pointNode];
    }

    [tripNode addChild:routeNode];

    return tripNode;
}

- (NSString *)XMLString{
    return [[self XMLNode] XMLString];
}

路线点也一样

@interface RoutePoint : NSObject

@property (nonatomic, strong) NSString *gps;
@property (nonatomic, copy) NSString *speed;

- (GDataXMLElement *)XMLNode;
- (NSString *)XMLString;

.m 文件

@implementation RoutePoint

- (GDataXMLElement *)XMLNode{

    GDataXMLElement *pointNode = [GDataXMLElement elementWithName:@"point"];

    GDataXMLElement *gpsElement = [GDataXMLElement elementWithName:@"gps" stringValue:self.gps];
    GDataXMLElement *speedElement = [GDataXMLElement elementWithName:@"speed" stringValue:self.speed];

    [pointNode addChild:gpsElement];
    [pointNode addChild:speedElement];

    return pointNode;
}

- (NSString *)XMLString{
    return [[self XMLNode] XMLString];
}

创建一个 Trip 实例填充值

Trip *trip = [Trip new];

trip.start_time = @"06/06/2013 09:00:00 AM";
trip.end_time = @"06/06/2013 09:30:00 AM";

trip.start_address = @"12 NGO, Roseville, Mp";
trip.end_address = @"8 STE stree, Roseville, MP";

trip.start_gps = @"+40.689060,-74.044636";
trip.end_gps = @"+42.689060, -72.044636";

trip.duration = @"00:00:00:00";
trip.label = @"Roseville Trip";

RoutePoint *point = [RoutePoint new];
point.gps = @"+40.689060,-74.044636";
point.speed = @"1.2 Miles/Hr";

trip.points = @[point];

NSLog(@"%@",[trip XMLString]);

【讨论】:

    【解决方案2】:

    我想过,有一段时间))有一些 XMLWriter 类,用于创建 XML。 但是我没有足够的时间来了解它们是如何工作的。无论如何,XML 只是一个字符串,您可以将其转换为数据。在那种情况下,我自己创建了它))

    NSMutableString *XMLString = [[NSMutableString alloc] init];
    [XMLString appendString:@"<?xml version=\"1.0\"?> \n"];
    [XMLString appendString:@"<scene> \n"];
    //... etc..
    

    你可以说这是个坏例子,但它对我有用)

    【讨论】:

      猜你喜欢
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2012-07-30
      相关资源
      最近更新 更多