java - 为什么无法解析此 XML 文件?

标签 java android xml android-studio

我正在制作英语听力申请

我需要显示级别、名称、音频文件的名称、测试的脚本。我想从 XML 文件中读取信息:"dataeasy.xml"

但我什至可以读取 dataeasy.xml 的第一个元素

这是我所做的:

  • activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearlayoutXML1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#66CCFF"
    android:orientation="vertical" >
    
    
    <TextView
    android:id="@+id/textViewLessonLevel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="30sp"
    android:textColor="#000000"
    android:textStyle="bold"
    android:text="Lesson Level"
    android:layout_gravity="center_horizontal"/>
    
    
    <TextView
    android:id="@+id/textViewLessonName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="15sp"
    android:textColor="#7f7f7f"
    android:textStyle="bold"
    android:text="Lesson Name"
    android:layout_gravity="center_horizontal" />
    
    <TextView
    android:id="@+id/textViewLessonLinkFile"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textColor="#865521"
    android:textStyle="bold"
    android:text="Lesson LinkFile"
    android:layout_gravity="center_horizontal"
    android:layout_marginLeft="40dp"
    android:layout_marginRight="40dp" />
    
    <TextView
    android:id="@+id/textViewLessonScript"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:textColor="#865521"
    android:textStyle="bold"
    android:text="Lesson Scipt"
    android:layout_gravity="center_horizontal"
    android:layout_marginLeft="40dp"
    android:layout_marginRight="40dp" />
    
    
    
    </LinearLayout>
    
  • DataEasyXML.java

     public class DataEasyXML extends DefaultHandler {
    
     boolean currentElement = false;
     String currentValue = "";
    
     // Array of lessons
     LessonEasyInfo lessonEasyInfo;
     ArrayList<LessonEasyInfo> List;
    
    
     public ArrayList<LessonEasyInfo> getList() {
         return List;
     }
    
     public void startElement(String uri, String localName, String qName,
                         Attributes attributes) throws SAXException {
    
         currentElement = true;
    
         if (qName.equals("Data")) {
             List = new ArrayList<LessonEasyInfo>();
         } else if (qName.equals("Lesson")) {
             lessonEasyInfo = new LessonEasyInfo();
         }
     }
    
     public void endElement(String uri, String localName, String qName)
             throws SAXException {
    
         currentElement = false;
    
         if (qName.equalsIgnoreCase("Level"))
             lessonEasyInfo.setLevel(currentValue.trim());
         else if (qName.equalsIgnoreCase("Name"))
             lessonEasyInfo.setName(currentValue.trim());
         else if (qName.equalsIgnoreCase("LinkFile"))
             lessonEasyInfo.setLinkFile(currentValue.trim());
         else if (qName.equalsIgnoreCase("Script"))
             lessonEasyInfo.setScript(currentValue.trim());
         else if (qName.equalsIgnoreCase("Level"))
             List.add(lessonEasyInfo);
    
         currentValue = "";
     }
    
     public void characters(char[] ch, int start, int length)
             throws SAXException {
    
         if (currentElement) {
             currentValue = currentValue + new String(ch, start, length);
         }
     }
     }
    
  • LessonEasyInfo.java

     public class LessonEasyInfo {
    
     String level = null;
     String name = "";
     String link = "";
     String script = "";
    
     public String getLevel() {
         return level;
     }
    
     public void setLevel(String level) {
         this.level = level;
     }
    
     public String getName() {
         return name;
     }
    
     public void setName(String name) {
         this.name = name;
     }
    
     public String getLinkFile() {
         return link;
     }
    
     public void setLinkFile(String link) {
        this.link = link;
     }
    
     public String getScript() {
         return script;
     }
    
     public void setScript(String script) {
         this.script = script;
     }
    
  • MainActivity.java

     public class MainActivity extends Activity {
    
     TextView tvLessonLevel;
     TextView tvLessonName;
     TextView tvLessonLinkFile;
     TextView tvLessonScript;
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
    
         tvLessonLevel = (TextView)findViewById(R.id.textViewLessonLevel);
         tvLessonName = (TextView)findViewById(R.id.textViewLessonName);
         tvLessonLinkFile = (TextView)findViewById(R.id.textViewLessonLinkFile);
         tvLessonScript = (TextView)findViewById(R.id.textViewLessonScript);
    
    
    
         parsedataeasyXML();
     }
    
     private void parsedataeasyXML(){
         // 
         AssetManager assetManager = getBaseContext().getAssets();
         try {
             //Get "dataeasy.xml"
             InputStream is = assetManager.open("dataeasy.xml");
             //
             SAXParserFactory spf = SAXParserFactory.newInstance();
             SAXParser sp = spf.newSAXParser();
             //Read XML Object
             XMLReader xr = sp.getXMLReader();
    
             // My
             DataEasyXML myXMLHandler = new DataEasyXML();
             //
             xr.setContentHandler(myXMLHandler);
             //Input
             InputSource inStream = new InputSource(is);
    
             xr.parse(inStream);
    
             // get the first element
             ArrayList<LessonEasyInfo> List = myXMLHandler.getList();
    
            tvLessonLevel.setText("Level: " + List.get(0).getLevel());
    
    
                 tvLessonName.setText("Name: " + List.get(0).getName());
    
    
                 tvLessonLinkFile.setText("LinkFile : " + List.get(0).getLinkFile());
    
                 tvLessonScript.setText("Script " + List.get(0).getScript());
    
    
    
             is.close();
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
    

    }

  • dataeasy.xml(数据库文件):我在这里只写了 2 个元素

    链接在这里:here

最佳答案

以下代码块永远不会将任何 LessonEasyInfo 对象添加到列表中,因为如果第一个 if 表达式的计算结果为 true,则其他均未进行评估。

 if (qName.equalsIgnoreCase("Level"))
     lessonEasyInfo.setLevel(currentValue.trim());
 else if (qName.equalsIgnoreCase("Name"))
     lessonEasyInfo.setName(currentValue.trim());
 else if (qName.equalsIgnoreCase("LinkFile"))
     lessonEasyInfo.setLinkFile(currentValue.trim());
 else if (qName.equalsIgnoreCase("Script"))
     lessonEasyInfo.setScript(currentValue.trim());
 else if (qName.equalsIgnoreCase("Level"))
     List.add(lessonEasyInfo);

将上面的代码改成这样

 if (qName.equalsIgnoreCase("Level")) {
     lessonEasyInfo.setLevel(currentValue.trim());
     List.add(lessonEasyInfo);
 }
 else if (qName.equalsIgnoreCase("Name"))
     lessonEasyInfo.setName(currentValue.trim());
 else if (qName.equalsIgnoreCase("LinkFile"))
     lessonEasyInfo.setLinkFile(currentValue.trim());
 else if (qName.equalsIgnoreCase("Script"))
     lessonEasyInfo.setScript(currentValue.trim());

关于java - 为什么无法解析此 XML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31835246/

相关文章:

java - 将 Python 网络代码转换为 Java

java - 使用另一个java程序调度一个java程序

java - 使用 AJP 在 Tomcat 中模拟和/或启用单点登录

php - XPATH 检查属性是否包含多个值之一

java - 如何指定通用类型作为函数参数

android - 显示 “Finished with error: Gradle task assembleDebug failed with exit code 1”。在Android Studio中运行Flutter。该怎么办?

android - Retrofit 2 中的错误处理是如何进行的?我找不到大多数解决方案建议的 RetrofitError 类?

android - 如何获取图像资源 ID 并将其发送到 Android 中的其他 Activity ?

java - JAXB、XSD 样式表和元素名称冲突解决

html - Rails 应用程序上的奇怪错误,仅在一个浏览器上,一个 url "Below is a rendering of the page up to the first error."