2010-07-01 37 views
0

在我的XML文件,
我已经在不同的地方(层和二层)使用相同的标记名称,
我怎么能differenciate从layer1的和二层命名为“<tile gid ="int">”标签?
我需要处理他们,如果他们属于LAYER1或二层不同,具体取决于...
这里是我的解析器的一个小样本,我的xml文件:如何区分属于layer1的xml标签和属于layer2的xml标签(如果它们使用相同的标签名称)?

// ================= 
// xml parser sample 
// ================= 
XmlResourceParser xrp = (XmlResourceParser) ctx.getResources().getXml(R.xml.castle); 
    while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) 
    { 
    if (xrp.getEventType() == XmlResourceParser.START_TAG) 
    { 
     String s = xrp.getName(); 
     if (s.equals("tile")) 
     { 
     int a = xrp.getAttributeIntValue(null, "gid", 0); 
     // process a 
     } 
    } 
    } 


// =============== 
// xml file sample: 
// =============== 
<layer name="layer1"> 
    <data> 
    <tile gid="1"/> 
    <tile gid="2"/> 
    ... 
    </data> 
</layer> 
<layer name="layer2"> 
    <data> 
    <tile gid="1"/> 
    <tile gid="2"/> 
    ... 
    </data> 
</layer> 

回答

0

您的解析器代码必须记住tile标记的START_TAG事件时它当前所处的图层类型。要做到这一点

一种方法是创建一个字段String currentLayer;和地方在你的代码有代码段类似

if (xrp.getEventType() == XmlResourceParser.END_TAG) 
{ 
    String s = xrp.getName(); 
    if (s.equals("layer")) 
    { 
    currentLayer = null; // or something ... 
    } 
} 

if (xrp.getEventType() == XmlResourceParser.START_TAG) 
{ 
    String s = xrp.getName(); 
    if (s.equals("layer")) 
    { 
    currentLayer = xrp.getAttributeValue(null, "name", 0); 
    } 
} 

然后在你的代码处理的瓷砖标签,你将使用该字段来决定采取类似的行动采取的行动

if (xrp.getEventType() == XmlResourceParser.START_TAG) 
{ 
    String s = xrp.getName(); 
    if (s.equals("tile")) 
    { 
    int a = xrp.getAttributeIntValue(null, "gid", 0); 
    if ("layer1".equals(currentLayer) { 
     // process layer1 tile. 
    } 
    else if ("layer2".equals(currentLayer) { 
     // process layer2 tile. 
    } 
    else { 
     // handle occurrence of tile outside layer. 
    } 
    } 
} 

这不一定是最好的办法,特别是如果它导致了巨大的嵌套的if-else结构,但是这可能让你开始。

更好的方法可能是为处理切片的委托设置一个字段,并在开始事件处理期间将其设置为适当的“切片处理器”对象(您必须将其定义为单独的类)图层标签,并在处理tile标签时使用它。但是很难放入代码片段。

+0

DPB和donroby,既答案是非常有用的 我有现在的工作 的感谢! – freeaks 2010-07-02 02:25:56

+0

@freeaks - 很好听!如果你接受的答案之一甚至是发布和接受自己与你实际上是如何解决这个问题,它会帮助所有。 – 2010-07-02 12:31:40

0

免责声明:不知道关于Android什么,但通常这种情况非常适合XML namespaces