【问题标题】:namespace error parsing android xml with groovy使用groovy解析android xml的命名空间错误
【发布时间】:2017-02-16 23:29:07
【问题描述】:

我正在尝试使用 Groovy 从 android 清单中读取 xml(特别是来自 import groovy.xml.XmlUtilXmlSlurper),而我正在从 Gradle 获取以下内容。

错误:与元素类型“activity”关联的属性“android:name”的前缀“android”未绑定。

导致该错误的代码如下:

def innerNodeTemplate = '''
                    <activity android:name=".activity.MyActivity"></activity>
                    '''
def activityNode = new XmlSlurper().parseText(innerNodeTemplate)

我尝试过如下声明命名空间(from this existing answer

activityNode = new XmlSlurper(false,false).parseText(innerNodeTemplate).declareNamespace(android:'android')

但随后我得到了针对同一命名空间问题的更明确的异常

错误:原因:org.xml.sax.SAXParseException;行号:2;列号:53;与元素类型“activity”关联的属性“android:name”的前缀“android”未绑定。

还有什么我可以尝试的吗?

【问题讨论】:

  • 您的 xml 中不存在这样的命名空间。为什么要在解析时添加?
  • 嗨 Rao,“android:name”在我的 xml 中。我是否需要在 xml sn-p 的开头添加类似 xmlnx:android="" 的声明?

标签: android xml gradle groovy android-gradle-plugin


【解决方案1】:

正如 Rao 指出的,我未能绑定 xml 命名空间。

解决方案是像这样将xmlns:android="http://schemas.android.com/apk/res/android" 添加到根标签

def innerNodeTemplate = '''<activity android:name=".activity.MyActivity" xmlns:android="http://schemas.android.com/apk/res/android"></activity>'''
activityNode = new XmlSlurper(false, true).parseText(innerNodeTemplate)

之后就不用打电话.declareNamespace( )

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 2014-01-10
    • 2010-11-08
    • 2018-07-15
    相关资源
    最近更新 更多