Существует три способа анализа XML в Android
DOM Parsers
SAX Parsers
XMLPullParser
Выполните следующие действия
Сначала добавьте разрешение READ_EXTERNAL_STORAGE
в свой файл манифеста
Затем проверьте разрешение во время выполнения для Android зефир и выше
Потому что Начиная с Android 6.0 (уровень API) 23) пользователи предоставляют разрешения приложениям во время работы приложения, а не при установке приложения
blockquote>int grant = ContextCompat.checkSelfPermission(this, permission); if (grant != PackageManager.PERMISSION_GRANTED) { String[] permission_list = new String[1]; permission_list[0] = permission; ActivityCompat.requestPermissions(this, permission_list, 1); }
Затем выполните синтаксический анализ вашего xml
Вот пример кода с использованием [ 1154]
DOM Parsers
ОБРАЗЕЦ КОДА
Создать класс модели
blockquote>public class Model { String rValue, aValue, eValue, nValue, gValue, dValue, vValue, mValue, iValue; public String getrValue() { return rValue; } public void setrValue(String rValue) { this.rValue = rValue; } public String getaValue() { return aValue; } public void setaValue(String aValue) { this.aValue = aValue; } public String geteValue() { return eValue; } public void seteValue(String eValue) { this.eValue = eValue; } public String getnValue() { return nValue; } public void setnValue(String nValue) { this.nValue = nValue; } public String getgValue() { return gValue; } public void setgValue(String gValue) { this.gValue = gValue; } public String getdValue() { return dValue; } public void setdValue(String dValue) { this.dValue = dValue; } public String getvValue() { return vValue; } public void setvValue(String vValue) { this.vValue = vValue; } public String getmValue() { return mValue; } public void setmValue(String mValue) { this.mValue = mValue; } public String getiValue() { return iValue; } public void setiValue(String iValue) { this.iValue = iValue; } }
[1144 ] MainActivity codeblockquote>
public class MainActivity extends AppCompatActivity { List
modelArrayList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // first check for runtime permission String permission = Manifest.permission.READ_EXTERNAL_STORAGE; int grant = ContextCompat.checkSelfPermission(this, permission); if (grant != PackageManager.PERMISSION_GRANTED) { String[] permission_list = new String[1]; permission_list[0] = permission; ActivityCompat.requestPermissions(this, permission_list, 1); }else { ParseXML(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 1) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(MainActivity.this, "READ_EXTERNAL_STORAGE permission granted", Toast.LENGTH_SHORT).show(); ParseXML(); } else { Toast.makeText(MainActivity.this, " READ_EXTERNAL_STORAGE permission not granted", Toast.LENGTH_SHORT).show(); } } } private void ParseXML() { File dir = Environment.getExternalStorageDirectory(); File yourFile = new File(dir, "test.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; try { dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(yourFile); doc.getDocumentElement().normalize(); Log.e("Root_element" , doc.getDocumentElement().getNodeName()); NodeList nodeList = doc.getElementsByTagName("OKV"); modelArrayList = new ArrayList (); for (int i = 0; i < nodeList.getLength(); i++) { Element element = (Element) nodeList.item(i); Model model = new Model(); model.setrValue(element.getAttribute("r")); model.setaValue(element.getAttribute("a")); model.setgValue(element.getAttribute("g" )); model.setmValue(element.getAttribute("m" )); model.seteValue(element.getAttribute("e" )); model.setdValue(element.getAttribute("d" )); model.setiValue(element.getAttribute("i")); model.setnValue(element.getAttribute("n" )); model.setvValue(element.getAttribute("v")); modelArrayList.add(model); } for (int i = 0; i < modelArrayList.size(); i++) { Log.e("DATA_VALUE", modelArrayList.get(i).getaValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getdValue()); Log.e("DATA_VALUE", modelArrayList.get(i).geteValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getnValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getvValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getgValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getrValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getiValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getmValue()); } } catch (SAXException | ParserConfigurationException | IOException e1) { e1.printStackTrace(); } } } OUTPUT
01-19 13:23:39.545 15689-15689/neel.com.demo E/Root_element: OKV 01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: Address 01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: 14021996 01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: email 01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: My Name 01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: 1 01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: male 01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: 129120190116115414009 01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: imagelink 01-19 13:23:39.545 15689-15689/neel.com.demo E/DATA_VALUE: 123456
для получения дополнительной информации, пожалуйста, проверьте ниже статью
blockquote> [ 1159]Android - XML Parser [1112 ] Android XML Parser - XMLPullParser Как читать XML-файл на Java (DOM Parser) Пример синтаксического анализатора Java SAX Как выполнить синтаксический анализ xml для класса java с представлением переработчика или в адаптере представления переработчика Анализ данных XML в приложениях для Android Разбор XML для Android с использованием DOM Parser Учебник по разбору XML для Android Обучение синтаксическому анализу XML Данные в вашем приложении для Android
ОБНОВЛЕНИЕ
import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import com.nbsp.materialfilepicker.MaterialFilePicker; import com.nbsp.materialfilepicker.ui.FilePickerActivity; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; public class MainActivity extends AppCompatActivity { List
modelArrayList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // first check for runtime permission String permission = Manifest.permission.READ_EXTERNAL_STORAGE; int grant = ContextCompat.checkSelfPermission(this, permission); if (grant != PackageManager.PERMISSION_GRANTED) { String[] permission_list = new String[1]; permission_list[0] = permission; ActivityCompat.requestPermissions(this, permission_list, 1); } else { pickFile(); } } private void pickFile() { new MaterialFilePicker() .withActivity(this) .withRequestCode(1) .withFilterDirectories(true) .withHiddenFiles(true) .start(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == RESULT_OK) { String filePath = data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH); Log.e("FILE_PATH", filePath); ParseXML(filePath); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 1) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(MainActivity.this, "READ_EXTERNAL_STORAGE permission granted", Toast.LENGTH_SHORT).show(); pickFile(); } else { Toast.makeText(MainActivity.this, " READ_EXTERNAL_STORAGE permission not granted", Toast.LENGTH_SHORT).show(); } } } private void ParseXML(String path) { File yourFile = new File(path); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder; try { dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(yourFile); doc.getDocumentElement().normalize(); Log.e("Root_element", doc.getDocumentElement().getNodeName()); NodeList nodeList = doc.getElementsByTagName("OKV"); modelArrayList = new ArrayList (); for (int i = 0; i < nodeList.getLength(); i++) { Element element = (Element) nodeList.item(i); Model model = new Model(); model.setrValue(element.getAttribute("r")); model.setaValue(element.getAttribute("a")); model.setgValue(element.getAttribute("g")); model.setmValue(element.getAttribute("m")); model.seteValue(element.getAttribute("e")); model.setdValue(element.getAttribute("d")); model.setiValue(element.getAttribute("i")); model.setnValue(element.getAttribute("n")); model.setvValue(element.getAttribute("v")); modelArrayList.add(model); } for (int i = 0; i < modelArrayList.size(); i++) { Log.e("DATA_VALUE", modelArrayList.get(i).getaValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getdValue()); Log.e("DATA_VALUE", modelArrayList.get(i).geteValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getnValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getvValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getgValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getrValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getiValue()); Log.e("DATA_VALUE", modelArrayList.get(i).getmValue()); } } catch (SAXException | ParserConfigurationException | IOException e1) { e1.printStackTrace(); } } } ПРИМЕЧАНИЕ для средства выбора файлов я использовал AndroidFileExplorer
Альтернатива преобразованию строки на сервере должна позволить CSS сделать работу:
text-transform: capitalize
Идея:
В классе создайте простой метод, который использует WordUtils от Apache палата общин Lang, который будет управлять Вашей Строкой:
import org.apache.commons.lang.WordUtils;
...
public static String titleCase(String input){
return WordUtils.capitalize(input);;
}
И теперь, создайте свой собственный тег (в function.tld):
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>functions library</description>
<display-name>functions</display-name>
<tlib-version>1.1</tlib-version>
<short-name>xfn</short-name>
<uri>http://yourdomain/functions.tld</uri>
<function>
<description>
Title case a String
</description>
<name>titleCase</name>
<function-class>Functions</function-class>
<function-signature>java.lang.String titleCase(java.lang.String)</function-signature>
<example>
${xfn:titleCase(string)}
</example>
</function>
</taglib>
PS: Я был вполне вдохновлен этим сообщением дать свой ответ.
Это не так уж сложно в JSTL ...
${fn:toUpperCase(fn:substring(user.firstName, 0, 1))}${fn:toLowerCase(fn:substring(user.firstName, 1, -1))}