我正在开发一个项目,该项目在 res/values 映射中有一个自定义 XML 文件。
这不是深度 XML:
<resources>
<accesspoint
...
Eclipse 生成错误:
found tag accesspoint where item is expected
现在,我用谷歌搜索了一下,到处都有类似的问题。但没有解决办法。 当我将它们全部更改为 item 并给它们指定名称和类型时,我仍然在结束标签上收到错误,仅显示“最初在此处定义”。
我在这里没有想法,有人知道这意味着什么吗?我该如何解决它?
Eclipse 中有些东西有点奇怪。 无论我如何重命名标签,我都遇到了与您相同的问题。
解决方案:删除标签,然后手动重写(不要复制/粘贴)。
一定有某种奇怪的隐藏字符以某种方式进入其中,因为只需重写完全相同的东西,我现在就没有错误了。
右键单击包资源管理器中的 xml 文件,然后选择“源”->“格式”。
我知道这是一个 9 年前的问题了。但我今天收到了同样的错误消息。我的解决方案与描述的答案不同。需要更改 - 此处 - 相应文件
accesspoints.xml
。我对应的内容是:
<resources>
<accesspoint name="btnOpen">false</accesspoint>
...
</resources>
此
accesspoint
标签将替换为 item
标签:
<resources>
<item type="accesspoint" name="btnOpen">false</item>
...
</resources>
尝试了以上所有解决方案。他们都没有工作。在Eclipse中发现问题:
将 xml 文件从 res/values 文件夹复制到 res/xml 文件夹。
通过 xmllint 运行 xml 源文件是获取不可见特殊字符的好方法。特别要注意不可破坏的空格 (///),如果 ADK 工具需要空格,则可能会导致神秘错误。
使用 MadEdit 或任何其他十六进制文件编辑器打开 xml 文件,查找“C2 A0”并将全部替换为正常空格。
或者简单地在命令行中
$sed -i 's/\xc2\xa0/ /g' /the/path/to/the/xml/file
在Android的res/values文件夹中,XML文件需要遵循特定的格式,尤其是资源文件。此格式仅限于某些类型的元素,例如
<string>
、<color>
、<dimen>
和 <item>
,它们必须遵循有关命名和结构的某些规则。出现错误的原因是 <accesspoint>
在 res/values XML 文件中未被识别为有效标签。
这里有一些方法可以解决这个问题:
将 XML 结构转换为有效的资源类型:
由于接入点在 res/values 目录中不是有效标签,因此您需要使用
<item>
标签。
将每个 <accesspoint>
元素定义为具有名称属性的 <item>
,并将任何唯一数据存储为项目属性或值。
以下是如何构建它的示例:
<resources>
<item name="accesspoint1" type="string">YourValue1</item>
<item name="accesspoint2" type="string">YourValue2</item>
</resources>
将 XML 移动到 res/xml 目录:
如果您需要使用自定义标签(如
<accesspoint>
),请在 res/xml 目录中创建一个新的 XML 文件,这样可以提供更灵活的结构。
res/xml 文件夹不强制执行相同的限制,因此您可以自由定义自定义标签和结构。
<!-- Save this in res/xml/access_points.xml -->
<accesspoints>
<accesspoint name="accesspoint1" value="YourValue1" />
<accesspoint name="accesspoint2" value="YourValue2" />
</accesspoints>
然后,使用 XmlResourceParser 在 Java/Kotlin 代码中加载此 XML:
XmlResourceParser parser = getResources().getXml(R.xml.access_points);
替代方案:使用 JSON 来存储自定义数据:
如果您的数据比较灵活,请考虑使用存储在 res/raw 中的 JSON,这可以简化解析和定制。
有时 Eclipse 会变得疯狂。
将代码粘贴到记事本中,然后从记事本中复制并粘贴到 Eclipse 中。