Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中解码xml中的字符串?_Android_Decode - Fatal编程技术网

如何在android中解码xml中的字符串?

如何在android中解码xml中的字符串?,android,decode,Android,Decode,在我的xml中,我有mil&;碳 从我的java代码中,我通过 public class MasterdataParser extends MasterdataBaseParser { protected MasterdataParser(InputStream response) { super(response); } public MasterData parse() { DocumentBuilderFactory fa

在我的xml中,我有
mil&;碳
从我的java代码中,我通过

public class MasterdataParser extends MasterdataBaseParser {

    protected MasterdataParser(InputStream response) {
        super(response);
    }

    public MasterData parse() {

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        MasterData masterData;

        try {

            DocumentBuilder builder = factory.newDocumentBuilder();
            Document dom = builder.parse(this.getInputStream());
            Element root = dom.getDocumentElement();

            masterData = new MasterData();

            NodeList list;
            Element element;
            NodeList childNodeList;
            Node node;
            String nodeName; 


list = root.getElementsByTagName(PREFIX+CATEGORY);

            for (int i=0;i<list.getLength();i++){

                element = (Element) list.item(i);
                childNodeList = element.getChildNodes();
                Category category = new Category();

                for (int j = 0; j < childNodeList.getLength(); j++) {

                    node = childNodeList.item(j);
                    nodeName = node.getNodeName();

                    if (nodeName.equalsIgnoreCase(PREFIX+CATEGORY_ID)) {
                        try{
                            category.setId(node.getFirstChild().getNodeValue());
                        } catch (NullPointerException ex) {
                            category.setId(null);
                        }
                    } 
     if (nodeName.equalsIgnoreCase(PREFIX+CATEGORY_NAME)) {
                            try{
    //                          System.out.println("Masterdataparser category name html "+Html.fromHtml(node.getFirstChild().getNodeValue()));   // Not worked
                                System.out.println("URL Decoder "+URLDecoder.decode(node.getFirstChild().getNodeValue(), "UTF-8"));  // Not worked
                                category.setName(node.getFirstChild().getNodeValue());
                            } catch (NullPointerException ex) {
                                category.setName(null);
                            }
                        }
}

public abstract class MasterdataBaseParser implements MasterdataParserInterface {
            static final String CATEGORY = "Category";
        static final String CATEGORY_ID = "Id";
        static final String CATEGORY_NAME = "Name";
    final InputStream response;

        protected MasterdataBaseParser(InputStream response){
                this.response = response;
        }

        protected InputStream getInputStream() {
            return response;
        }
    }
公共类MasterdataParser扩展MasterdataBaseParser{
受保护的MasterdataParser(InputStream响应){
超级(响应);
}
公共主数据解析(){
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
主数据主数据;
试一试{
DocumentBuilder=factory.newDocumentBuilder();
文档dom=builder.parse(this.getInputStream());
Element root=dom.getDocumentElement();
masterData=新的masterData();
节点列表;
元素;
NodeList儿童NodeList;
节点;
字符串节点名;
list=root.getElementsByTagName(前缀+类别);

对于(inti=0;i,这里有一个示例,说明如何使用一个类解析器和多个xml流进行操作:

public class RSSHandler extends DefaultHandler {
    int                         RSS_ID;
    ContentValues               parsedValues    = new ContentValues();
    private String              parsedString    = null;
    protected DataController    _dataController;
    private StringBuffer        parsedBuffer    = new StringBuffer();

    public void setRssId(int rssId) {

        RSS_ID = rssId;
    }

    public void setDataController(DataController dataController) {

        _dataController = (DataController) dataController;
    }

    @Override
    public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {

    }

    @Override
    public void endElement(String namespaceURI, String localName, String qName) throws SAXException {

        parsedString = parsedString.trim();
        switch (RSS_ID) {
            case (0):
                if (localName.equals("Application")) {
                    _dataController.insertRowInTable(RSS_ID, parsedValues);
                }
                else {
                    parsedValues.put(localName, parsedString);
                }
                break;
            case (1):
                if (localName.equals("tab")) {
                    _dataController.insertRowInTable(RSS_ID, parsedValues);
                }
                else {
                    parsedValues.put(localName, parsedString);
                }
                break;
            case (2):
                if (localName.equals("category")) {
                    _dataController.insertRowInTable(RSS_ID, parsedValues);
                }
                else {
                    parsedValues.put(localName, parsedString);
                }
                break;
            case (3):
                if (localName.equals("item")) {
                    _dataController.insertRowInTable(RSS_ID, parsedValues);
                }
                else {
                    parsedValues.put(localName, parsedString);
                }
                break;
            case (4):
                if (localName.equals("event")) {
                    _dataController.insertRowInTable(RSS_ID, parsedValues);
                }
                else {
                    parsedValues.put(localName, parsedString);
                }
                break;
            case (5):
                if (localName.equals("album")) {
                    _dataController.insertRowInTable(RSS_ID, parsedValues);
                }
                else {
                    parsedValues.put(localName, parsedString);
                }
                break;
            case (6):
                if (localName.equals("picture")) {
                    _dataController.insertRowInTable(RSS_ID, parsedValues);
                }
                else {
                    parsedValues.put(localName, parsedString);
                }
                break;
            case (7):
                if (localName.equals("location")) {
                    _dataController.insertRowInTable(RSS_ID, parsedValues);
                }
                else {
                    parsedValues.put(localName, parsedString);
                }
                break;
            default:
                break;
        }
        parsedString = "";
        parsedBuffer = new StringBuffer();
    }

    @Override
    public void characters(char ch[], int start, int length) {

        parsedBuffer.append(ch, start, start + length);
        parsedString = parsedBuffer.toString();
    }
}
DataController只是一个访问方法和属性的全局类

public void insertRowInTable(int tableId, ContentValues myRow) {

        String myTable = _tableNameList.get(tableId);
        _dataBaseHelper.createRowInTable(myTable, myRow);
    }

public void createRowInTable(String tableName, ContentValues values) {

    try {
        myDataBase.insert(tableName, null, values);
    }
    catch (Exception e) {
        //catch
    }
}

在解析xml时,默认情况下“&”表现为“转义序列”(在android较低版本如2.2中),这就是我无法解析“mil&carbon”的原因。因此,在解析之前,我在文件下用
“ampersand”(大写)
替换了
“mil-ampersand-carbon”节点
然后用
“&”(符号)
替换
“与”
。非常感谢“Yume”先生

发布您的整个课程。您不是使用DefaultHandler解析XML流吗?我会尝试一下。感谢您的帮助,我使用了我在sql数据库中插入的值,但您可以用其他方式轻松使用这些值。我无法接受“mil&;carbon”如果我们直接转换那个字符串,那么我就得到了。但是我不能直接从xml获取。您是否尝试过这样的方式:“string string=Html.fromHtml(myString)”尝试过“string java=Html.fromHtml(Html).toString()”,以及一些“string Html=“B&;M冲突修复”例如,它是一种从html传递到java的方法,应该可以工作。如果它不检查您的流,可能:/