2017-02-16 7 views
0

Я пытаюсь прочитать xml из манифеста android с помощью Groovy (особенно XmlSlurper от import groovy.xml.XmlUtil), и я становлюсь ниже от Gradle.namespace error parsing android xml with groovy

Error:The prefix "android" for attribute "android:name" associated with an element type "activity" is not bound.

Код, который приводит к этой ошибки заключается в следующем:

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') 

, но затем я получаю более явным исключение для одного и того же номера пространства имен

Error:Cause: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 53; The prefix "android" for attribute "android:name" associated with an element type "activity" is not bound.

Есть ли что-нибудь еще, что я могу попробовать?

+0

Там не существует такого пространства имен, ограниченное в вашем XML. Почему вы добавляете во время разбора? – Rao

+0

Привет, Rao, «android: name» находится в моем xml. Нужно ли добавлять объявление типа xmlnx: android = "" в начале фрагмента xml? –

ответ

0

Как отметил Рао, я не смог связать пространство имен 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()