티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

frequent issues arising in android view, Error parsing XML: unbound prefix

안드로이드 뷰에서 발생하는 일반적인 문제 중 하나인 "Error parsing XML: unbound prefix" 오류입니다.

 문제 내용 

I have frequent problem in android view, Error parsing XML: unbound prefix on Line 2.

안드로이드 뷰에서 "Error parsing XML: unbound prefix on Line 2"와 같은 오류가 자주 발생합니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:id="@+id/myScrollLayout" 
android:layout_width="fill_parent"  android:layout_height="wrap_content">
    <TextView android:layout_height="wrap_content" android:layout_width="fill_parent" 
    android:text="Family" android:id="@+id/Family" 
    android:textSize="16px" android:padding="5px" 
    android:textStyle="bold" android:gravity="center_horizontal">
    </TextView>

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:orientation="vertical" android:scrollbars="vertical">
        <LinearLayout android:orientation="vertical" android:id="@+id/myMainLayout" 
        android:layout_width="fill_parent"  android:layout_height="wrap_content">
        </LinearLayout>
    </ScrollView>

</LinearLayout>

 

 

 높은 점수를 받은 Solution 

A couple of reasons that this can happen:

이러한 문제가 발생하는 이유는 다음과 같습니다:

 

1) You see this error with an incorrect namespace, or a typo in the attribute. Like 'xmlns' is wrong, it should be xmlns:android

1. 'xmlns'가 아닌 'xmlns:android' 여야 하는 올바른 네임스페이스(namespace)이거나, 속성에 오타가 있는 경우 이러한 오류가 발생할 수 있습니다.

 

2) First node needs to contain: xmlns:android="http://schemas.android.com/apk/res/android"

2. 첫 번째 노드에는 다음이 포함되어야 합니다: xmlns:android="http://schemas.android.com/apk/res/android

 

3) If you are integrating AdMob, check custom parameters like ads:adSize, you need

3. AdMob를 통합하는 경우, 광고 크기(ads:adSize)와 같은 사용자 정의 매개 변수를 확인해야 합니다.

xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

 

4) If you are using LinearLayout you might have to define tools:

4. 만약 LinearLayout을 사용하고 있다면 tools:를 정의해야 할 수도 있습니다.

xmlns:tools="http://schemas.android.com/tools"

 

 

 가장 최근 달린 Solution 

OK, there are lots of solutions here but non actually explain the root cause of the problem so here we go:

여러 해결책들이 있지만 실제 문제의 근본 원인을 설명하지 않는 것 같습니다. 그래서 이제 문제의 근본 원인을 설명하겠습니다.

 

when you see an attribute like android:layout_width="match_parent" the android part is the prefix, the format for an attribute here is PREFIX:NAME="VALUE". in XML, namespaces and prefixes are ways to avoid naming conflicts for example we can have two distinct attributes with same name but different prefixes like: a:a="val" and b:a="val".

android:layout\_width="match\_parent"와 같이 android로 시작하는 속성을 볼 때, android는 prefix입니다. 여기서 attribute의 format은 PREFIX:NAME="VALUE"입니다. XML에서 namespace와 prefix는 이름 충돌을 피하는 방법입니다. 예를 들어 a:a="val"과 b:a="val"과 같은 같은 이름이지만 다른 prefix를 가진 두 가지 속성을 가질 수 있습니다.

 

to use prefixes like android or app or any other your should define a namespace using xmlns attribute.

android나 app 같은 접두사를 사용하려면, xmlns 속성을 사용하여 네임스페이스를 정의해야 합니다.

 

so if you have this issue just find prefixes that do not have a namespace defined, if you have tools:... you should add tools namespace as some answeres suggested, if you have app:... attribute you should add xmlns:app="http://schemas.android.com/apk/res-auto" to the root element

따라서, 이 문제가 발생하면 네임스페이스가 정의되지 않은 프리픽스를 찾아야 합니다. 만약 tools:... 가 있다면 몇몇 답변에서 제안한 대로 tools 네임스페이스를 추가해야하고, app:... 속성이 있다면 루트 엘리먼트에 xmlns:app="" 를 추가해야합니다.

 

Further reading:

추가적인 자료:

 

XML Namespaces simple explanation

XML 네임스페이스 간단한 설명

 

XML Namespaces in W3

 

 

 

출처 : https://stackoverflow.com/questions/2221221/frequent-issues-arising-in-android-view-error-parsing-xml-unbound-prefix

반응형
댓글
공지사항
최근에 올라온 글