android 找到标签...预期项目的位置

问题描述 投票:0回答:8

我正在开发一个项目,该项目在 res/values 映射中有一个自定义 XML 文件。

这不是深度 XML:

<resources>
    <accesspoint
    ...

Eclipse 生成错误:

found tag accesspoint where item is expected

现在,我用谷歌搜索了一下,到处都有类似的问题。但没有解决办法。 当我将它们全部更改为 item 并给它们指定名称和类型时,我仍然在结束标签上收到错误,仅显示“最初在此处定义”。

我在这里没有想法,有人知道这意味着什么吗?我该如何解决它?

android
8个回答
14
投票

Eclipse 中有些东西有点奇怪。 无论我如何重命名标签,我都遇到了与您相同的问题。

解决方案:删除标签,然后手动重写(不要复制/粘贴)。

一定有某种奇怪的隐藏字符以某种方式进入其中,因为只需重写完全相同的东西,我现在就没有错误了。


7
投票

右键单击包资源管理器中的 xml 文件,然后选择“源”->“格式”。


3
投票

我知道这是一个 9 年前的问题了。但我今天收到了同样的错误消息。我的解决方案与描述的答案不同。需要更改 - 此处 - 相应文件

accesspoints.xml
。我对应的内容是:

<resources>
    <accesspoint name="btnOpen">false</accesspoint>
    ...
</resources>

accesspoint
标签将替换为
item
标签:

<resources>
    <item type="accesspoint" name="btnOpen">false</item>
    ...
</resources>

2
投票

尝试了以上所有解决方案。他们都没有工作。在Eclipse中发现问题:

将 xml 文件从 res/values 文件夹复制到 res/xml 文件夹。


0
投票

通过 xmllint 运行 xml 源文件是获取不可见特殊字符的好方法。特别要注意不可破坏的空格 (///),如果 ADK 工具需要空格,则可能会导致神秘错误。


0
投票

使用 MadEdit 或任何其他十六进制文件编辑器打开 xml 文件,查找“C2 A0”并将全部替换为正常空格。

或者简单地在命令行中

$sed -i 's/\xc2\xa0/ /g' /the/path/to/the/xml/file


0
投票

在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,这可以简化解析和定制。


-1
投票

有时 Eclipse 会变得疯狂。

将代码粘贴到记事本中,然后从记事本中复制并粘贴到 Eclipse 中。

© www.soinside.com 2019 - 2024. All rights reserved.