ปัญหาที่พบบ่อยที่เกิดขึ้นในมุมมอง Android ข้อผิดพลาดในการแยกวิเคราะห์ XML: คำนำหน้าไม่ได้ผูกไว้


296

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>

9
ตรวจสอบคำตอบทั้งหมดที่โพสต์ไว้สำหรับสิ่งนี้; ถูกต้องทั้งหมด ปัญหาคือเนมสเปซ XML และมีหลายวิธีที่อาจผิดอย่างร้ายแรง
whitey04

หมายเหตุสั้น ๆ หากคุณลืมความคิดเห็นทั้งหมดของ supress ในบรรทัดแรกของคุณคุณจะไม่สังเกตเห็นว่ามีบางอย่างผิดปกติกับเค้าโครงของคุณ (เช่นนี้: <? xml version = "1.0" encoding = "utf-8"? > <! - ระงับ ALL ->)
Mike

คำตอบ:


555

เหตุผลสองประการที่สิ่งนี้สามารถเกิดขึ้นได้:

1) คุณเห็นข้อผิดพลาดนี้กับเนมสเปซที่ไม่ถูกต้องหรือพิมพ์ผิดในแอตทริบิวต์ เช่นเดียวกับ 'xmlns' ผิดมันควรจะเป็นxmlns:android

2) โหนดแรกต้องมี: xmlns:android="http://schemas.android.com/apk/res/android"

3) หากคุณกำลังผสานรวม AdMob ให้ตรวจสอบพารามิเตอร์ที่กำหนดเองเช่นads:adSizeคุณต้องการ

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

4) ถ้าคุณใช้LinearLayoutคุณอาจต้องกำหนดเครื่องมือ:

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


คุณหมายถึงอะไรโดย "โหนดแรก" ในคำถามเดิมคือ TextView?
David Doria

1
... และใน AdMob ใหม่ของ Google Play มันคือ: xmlns: ads = " schemas.android.com/apk/res-auto "
1010160

ขอบคุณมากฉันแก้ไขปัญหาของฉันในกรณีที่ 3 โดยเพิ่มบรรทัดนี้ xmlns: ads = " schemas.android.com/apk/lib/com.google.ads " +1 สำหรับคำตอบ
Shylendra Madda

101

ฉันจะเพิ่มคำตอบแยกต่างหากเพราะฉันไม่เห็นที่นี่ ไม่ใช่ 100% ที่ Pentium10 ร้องขอ แต่ฉันลงเอยด้วยการค้นหาError parsing XML: unbound prefix

ปรากฎว่าฉันใช้พารามิเตอร์ที่กำหนดเองสำหรับโฆษณา AdMob เช่นads:adSizeแต่ฉันไม่ได้เพิ่ม

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

เพื่อเค้าโครง เมื่อฉันเพิ่มมันมันใช้งานได้ดี


63

ฉันมีปัญหาเดียวกันนี้

ตรวจสอบให้แน่ใจว่าคำนำหน้า (android: [any]] สะกดถูกต้องและเขียนอย่างถูกต้อง ในกรณีของบรรทัดxmlns:android="http://schemas.android.com/apk/res/android" ตรวจสอบให้แน่ใจว่าคุณมีคำนำหน้าเต็มxmlns:androidและสะกดอย่างถูกต้อง เช่นเดียวกันกับคำนำหน้าอื่น ๆ - android:[name]ให้แน่ใจว่าพวกเขาจะสะกดถูกต้องและมีความ นี่คือสิ่งที่แก้ไขปัญหาของฉัน


1
ใช่ในกรณีของฉันข้อผิดพลาดเกิดจาก androi: src = "@ drawable / half" - ซึ่งผิดอย่างชัดเจน!
IgorGanapolsky

ใช่ฉันมีปัญหาเดียวกัน ฉันยังขาดส่วน "xmln:" เช่นกัน
user1032613

32

ในขณะที่คุณพูดถึงคุณจะต้องระบุnamespace ขวา คุณจะเห็นข้อผิดพลาดนี้ด้วยเนมสเปซที่ไม่ถูกต้อง

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns="http://schemas.android.com/apk/res/android"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:padding="10dip">

จะไม่ทำงาน.

เปลี่ยนแปลง:

xmlns="http://schemas.android.com/apk/res/android"

ถึง

xmlns:android="http://schemas.android.com/apk/res/android"

ข้อความแสดงข้อผิดพลาดอ้างอิงถึงทุกสิ่งที่เริ่มต้น "android:" เนื่องจาก XML ไม่ทราบว่าandroid:เนมสเปซ "" คืออะไร

xmlns:android กำหนดมัน


23

ข้อผิดพลาดนี้อาจเกิดขึ้นในกรณีที่คุณใช้คำนำหน้าไม่ได้กำหนดเช่น:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TabHost
    XYZ:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >


</TabHost>

คอมไพเลอร์ Android ไม่ทราบว่า XYZ คืออะไรเพราะยังไม่ได้กำหนด

ในกรณีของคุณคุณควรเพิ่มด้านล่างกำหนดให้กับรูทโหนดของไฟล์ xml

xmlns:android="http://schemas.android.com/apk/res/android"


2
อันนี้ทำเพื่อฉัน มันเป็นข้อผิดพลาดที่อ่อนแอ: แทนที่จะเป็น Android: layout_weight ฉันพิมพ์ anrdoid: layout_weigth
Yahel

เหงียน, วิธีการกำหนด XYZ? ขอบคุณ
Anatoliy Shuba

10

ข้อผิดพลาดคำนำหน้า unbound สำหรับตัวบ่งชี้ ViewPager:

พร้อมกับแท็กส่วนหัวต่อไปนี้ใน parentLayout ของคุณ:

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

เพิ่มด้วย:

xmlns:app="http://schemas.android.com/apk/res-auto"

นี้ได้เคล็ดลับสำหรับฉัน.


9

สำหรับฉันฉันได้รับข้อผิดพลาด "คำนำหน้า unbound" ที่บรรทัดแรกที่นี่แม้ว่าฉันจะมีระบบสะกดคำผิดในบรรทัดที่สี่

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
anrdoid:fillViewport="true"
>

7

ฉันมีปัญหาเดียวกันและพบว่าวิธีแก้ปัญหาคือการเพิ่ม Android: เครื่องมือไปยังโหนดแรก ในกรณีของฉันมันเป็น LineraLayout:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical">

ใช่ถ้าคุณอ้างอิงเครื่องมือ แต่ไม่ต้องเพิ่มเนมสเปซสำหรับเครื่องมือคุณจะได้รับสิ่งนี้เช่นกัน
Dr. Ferrol Blackmon

3

ฉันจะเพิ่มอีกนิดสำหรับมือใหม่และสำหรับคนอย่างฉันที่ไม่เข้าใจ XML

คำตอบข้างต้นค่อนข้างดี แต่คำตอบทั่วไปคือคุณต้องการเนมสเปซสำหรับเนมสเปซที่ใช้ในไฟล์ config.xml

การแปล: ชื่อแท็ก XML ใด ๆ ที่มีแท็กที่มีเนมสเปซโดยที่ blah คือเนมสเปซและ fubar คือแท็ก XML เนมสเปซช่วยให้คุณใช้เครื่องมือต่าง ๆ มากมายในการตีความ XML ด้วยชื่อแท็กของตัวเอง ตัวอย่างเช่น Intel XDK ใช้เนมสเปซ intelxdk และ android ใช้ android ดังนั้นคุณจำเป็นต้องใช้เนมสเปซต่อไปนี้หรือบิลด์เลือด (เช่นการแยกวิเคราะห์ข้อผิดพลาด XML: คำนำหน้า unbound) ซึ่งแปลเป็น: คุณใช้เนมสเปซ แต่ไม่ได้กำหนดไว้

  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:intelxdk="http://xdk.intel.com/ns/v1"

3

ตกลงมีวิธีแก้ปัญหามากมายที่นี่ แต่ไม่ใช่อธิบายสาเหตุที่แท้จริงของปัญหาดังนั้นเราไปที่นี่:

เมื่อคุณเห็นคุณลักษณะเช่นส่วนหนึ่งเป็นคำนำหน้ารูปแบบสำหรับแอตทริบิวต์ที่นี่คือ ในรูปแบบ XML, namespaces และคำนำหน้าเป็นวิธีที่จะหลีกเลี่ยงความขัดแย้งการตั้งชื่อตัวอย่างเช่นเราสามารถมีสองคุณลักษณะที่แตกต่างกันที่มีชื่อเดียวกัน แต่แตกต่างกันเช่นคำนำหน้า: และandroid:layout_width="match_parent"androidPREFIX:NAME="VALUE"a:a="val"b:a="val"

เพื่อใช้ส่วนนำหน้าเช่นandroidหรือappอื่น ๆ ของคุณควรกำหนด namespace โดยใช้xmlnsคุณลักษณะ

ดังนั้นหากคุณมีปัญหานี้เพียงค้นหาคำนำหน้าที่ไม่ได้กำหนด namespace ถ้าคุณมีtools:...คุณควรเพิ่มเครื่องมือ namespace ตามคำตอบที่แนะนำถ้าคุณมีapp:...คุณสมบัติคุณควรเพิ่มxmlns:app="http://schemas.android.com/apk/res-auto"องค์ประกอบราก

อ่านเพิ่มเติม:

คำอธิบายอย่างง่ายของ XML Namespaces

XML Namespaces ใน W3


2

ข้อผิดพลาดนี้มักจะเกิดขึ้นหากคุณไม่ได้รวมxmlns:mmอย่างถูกต้องมันมักจะเกิดขึ้นในบรรทัดแรกของรหัส

สำหรับฉันมันเป็น ..

xmlns: mm = "http://millennialmedia.com/android/schema"

ที่ฉันพลาดในบรรทัดแรกของรหัส

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mm="http://millennialmedia.com/android/schema"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="50dp"
android:layout_marginBottom="50dp"
android:background="@android:color/transparent" >

1

ในกรณีของฉันข้อผิดพลาดไม่ได้เกิดจากปัญหา namespace xml ใด ๆ ข้างต้น แต่เป็นตำแหน่งของแอandroid:idททริบิวต์ - มันต้องเป็นรายการแรกในการประกาศองค์ประกอบเฉพาะ

ดังนั้นนี่คือ:

<TextView android:layout_width="fill_parent" 
      android:layout_height="wrap_content"
      android:id="@+id/bottomtext" 
      android:singleLine="true" />

... จำเป็นต้องอ่านสิ่งนี้:

<TextView android:id="@+id/bottomtext" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"
      android:singleLine="true" />

1

นอกจากทั้งหมดนี้แล้วยังมีสถานการณ์จำลองที่ข้อผิดพลาดนี้เกิดขึ้น -

เมื่อคุณหรือโครงการห้องสมุดของคุณกำหนดแอตทริบิวต์ที่กำหนดเอง int attr.xml และคุณใช้คุณลักษณะเหล่านี้ในไฟล์เลย์เอาต์ของคุณโดยไม่ต้องกำหนดเนมสเปซ

โดยทั่วไปเราใช้นิยามเนมสเปซนี้ในส่วนหัวของไฟล์เลย์เอาต์ของเรา

xmlns:android="http://schemas.android.com/apk/res/android"

จากนั้นตรวจสอบให้แน่ใจว่าแอตทริบิวต์ทั้งหมดในไฟล์ของคุณเริ่มต้นด้วย

android:ATTRIBUTE-NAME

คุณต้องระบุตัวตนหาก attirbute บางตัวของคุณไม่ได้เริ่มต้นด้วยสิ่งอื่นที่ไม่ใช่ android: ATTRIBUTE-NAME like

temp:ATTRIBUTE-NAME

ในกรณีนี้คุณมี "temp" นี้เป็น namespace โดยทั่วไปด้วยการรวม -

xmlns:temp="http://schemas.android.com/apk/res-auto"

1

คุณเพียงแค่ต้องเพิ่มชื่อพื้นที่ที่เหมาะสมในแท็กรูตของคุณ xmlns: android = "http://schemas.android.com/apk/res/android" Android elemets ถูกประกาศในพื้นที่ชื่อนี้เช่นเดียวกับการนำเข้าคลาสหรือแพ็คเกจ


0

มันมักจะเกิดขึ้นกับฉันเมื่อฉันสะกดคำผิด android - ฉันพิมพ์ andorid หรือเหมือนกันและมันไม่ชัดเจนตั้งแต่แรกเห็นโดยเฉพาะอย่างยิ่งหลังจากการเขียนโปรแกรมหลายชั่วโมงดังนั้นฉันจึงค้นหา "android" ทีละคนและดูว่าการค้นหาข้ามหรือไม่ แท็ก - ถ้าเป็นเช่นนั้นฉันจะได้ดูอย่างใกล้ชิดและดูว่าพิมพ์ผิดที่ไหน


0

ฉันพบข้อผิดพลาดนี้ใน Xamarin เมื่อฉันใช้งาน

  <android.support.v7.widget.CardView  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"  
    card_view:cardElevation="4dp"  
    card_view:cardCornerRadius="5dp"  
    card_view:cardUseCompatPadding="true">  
  </android.support.v7.widget.CardView>

ในไฟล์เลย์เอาต์โดยไม่ต้องติดตั้งแพ็คเกจ nuget สำหรับ android.support.v7.widget.CardView

การติดตั้งแพ็คเกจ nuget ที่ใช้แก้ไขปัญหาได้ หวังว่าจะช่วยได้ฉันไม่เห็นคำตอบนี้ในรายการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.