2012-04-10 45 views
1

我在res/xml /文件夹中有一个XML索引,我希望它包含其他xml文件,以便在解析R.xml.index时,所有文件都合并成一个资源。Android在Eclipse中合并/包含嵌套的XML非布局资源

我试图include layout trick适应XML解析,所以我index.xml看起来像这样:

<?xml version="1.0" encoding="utf-8"?> 
<Index xmlns:android="http://schemas.android.com/apk/res/android"> 
<Sheet> 
    <include xml="o_2sq_m.xml"/> 
    <include xml="o_2sq_r.xml"/> 
</Sheet> 
<Sheet> 
    <include xml="o_sq_tr_m.xml"/> 
    <include xml="o_sq_tr_r.xml"/> 
</Sheet> 
</Index> 

和文件o_2sq_m.xml,这是在同一文件夹中INDEX.XML,看起来像这样:

<?xml version="1.0" encoding="UTF-8"?> 
<Challenge xmlns:android="http://schemas.android.com/apk/res/android"> 
<Dimensions maxX="512" maxY="342" /> 
<Point id="1" x="94" y="101" color="0x00000000" /> 
... 
</Challenge> 

但是,当我与分析INDEX.XML和XmlPullParser,我看到它解析包括标签,而不需要展开调试,即它不访问文件的树o_2sq_m.xml

我应该怎么做才能使android将文件包含在另一个文件中?

回答

1

如果你没有做太多的XML进口(如在创建时间),你可以使用getResources().getIdentifier(),这对于这样一个指数(除去.xml的属性)

<Index xmlns:android="http://schemas.android.com/apk/res/android"> 
<Sheet> 
    <include customAttr="o_2sq_m"/> ... 
</Sheet> 

,并考虑到您要包含的文件被命名为o_2sq_m.xml,您可以使用下面的代码:

switch(tag) { 
case "include" : 
    String xmlid = xpp.getAttributeValue(null, "customAttr"); 
    Int xmlIncludedId = res.getIdentifier(xmlid, "xml", getPackageName()); 
    if(xmlIncludedId != 0) { 
    // Here the xmlIncludedId can be used to import other XML files. 
    // E.g. getResources().getXml(xmlIncludedId) returns an XmlResourceParser 
    } 
+0

谢谢,这是我一直在寻找的东西。 – 2012-04-11 10:27:35

0

该标签用于布局,不适用于任何xml文件。如果您将其用于布局,布局充气器将在需要时将其替换为相应的文件。在一个普通的xml中,它将被认为是一个像其他标签一样的标签。我不认为有可能做你想做的事。