Android:从XML获取HTML文本

时间:2014-04-11 07:44:01

标签: java android xml saxparser

我在我的应用程序中实现了读取XML。它工作正常。但我想格式化文本。我在XML中尝试过:

 <monumento>
     <horarios><b>L-V:</b> 10 a 20<br/>S-D: 11 a 15</horarios>
     <tarifas>4000</tarifas>
 </monumento>

但是,如果我放置HTML字符,我唯一得到的是该文本不会显示在我的应用中。 我会有很多xml,所以我不会总是知道放在哪里<b>, <br/> ......

我该怎么做?

主要

StringBuilder builder = new StringBuilder();

        for (HorariosTarifasObj post : helper.posts) {
            builder.append(post.getHorarios());
        } 
        horario2.setText(builder.toString());

        builder = new StringBuilder();
        for (HorariosTarifasObj post : helper.posts) {
            builder.append(post.getTarifas());
        }
        tarifa2.setText(builder.toString());

的XMLReader

public void get() {

    try {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();

        XMLReader reader = parser.getXMLReader();
        reader.setContentHandler(this);

        InputStream inputStream = new URL(URL + monumento + ".xml").openStream();
        reader.parse(new InputSource(inputStream));

    } catch (Exception e) {

    }
}

@Override
public void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException {

    currTag = true;
    currTagVal = "";

    if (localName.equals("monumento")) {
        post = new HorariosTarifasObj();
    }
}

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

    currTag = false;

    if(localName.equalsIgnoreCase("horarios")) {
        post.setHorarios(currTagVal);

    } else if(localName.equalsIgnoreCase("tarifas")) {
        post.setTarifas(currTagVal);

    } else if (localName.equalsIgnoreCase("monumento")) {
        posts.add(post);
    }
}

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

    if (currTag) {
        currTagVal = currTagVal + new String(ch, start, length);
        currTag = false;
    }
}

2 个答案:

答案 0 :(得分:1)

尝试CDATA

<monumento>
     <horarios><![CDATA[<b>L-V:</b> 10 a 20<br/>S-D: 11 a 15]]></horarios>
     <tarifas>4000</tarifas>
 </monumento>

答案 1 :(得分:0)

在XML中,&lt;和&gt;字符是为XML标记保留的。您需要使用特殊编码字符替换它们来保护它们。

您可以将&gt;用于&gt;和&lt; for&lt;

(编辑)Eomm回答是正确的,CDATA也这样做,而且更简单

另外,要在TextView中使用HTML编码,您需要使用Html.fromHtml()方法

例如:

tarifa2.setText(Html.fromHtml(builder.toString()));