0

私はそのような問題を抱えています。XML を解析し、ASCII エンコードされた文字で値を取得する必要があります。私のxmlの一部

 <response>
    <object>
    <id>793675</id>
    <name>&#381;irm&#363;n&#371;</name>
...

値を取得するには、name関数を使用します

public String getValue(Element item, String str) {
        NodeList n = item.getElementsByTagName(str);
        return getElementValue(n.item(0));
    }

public final String getElementValue( Node elem ) {
             Node child;
             if( elem != null){
                 if (elem.hasChildNodes()){
                     for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                         if( child.getNodeType() == Node.TEXT_NODE  || child.getNodeType() == Node.CDATA_SECTION_NODE || child.getNodeType() == Node.ELEMENT_NODE){
                             return child.getNodeValue();
                         }
                     }
                 }
             }
             return "";
      }

そのように:

Document doc = XMLfromString(xml);
NodeList nodes = doc.getElementsByTagName("object");
Element e = (Element)nodes.item(0);
String restName = Html.fromHtml(getValue(e, "name")).toString();

しかし、結果として、文字列のみに含まれる前に文字列を含む値のみがあり、# 文字&restName はなぜ切り捨てられ# ますか? 文字#はxmlで許可されていますね。完全な文字列値を取得するにはどうすればよいですか?

4

1 に答える 1

0

以下に示すように、Saxパーサーとオーバーライドメソッドを使用します。

saxのデフォルトのハンドラーを使用することをお勧めします。それが機能するかどうかを確認します。そうでない場合は、デフォルトのハンドラーを拡張し、値を正しく格納するためにこのメソッドの動作をオーバーライドする必要があります。myURLStringは、拡張クラスで定義する変数です。この変数は、たとえばendElementメソッドでアクセスできます。ここでこれを完全に制御できます。

したがって、1つの方法は、org.xml.sax.helpers.DefaultHandlerを拡張することです。

     protected String myValueString;


    @Override
    public void characters(char[] ch, int start, int length) throws SAXException
    {
       super.characters(ch, start, length);  // deal with escape values here.
        myValueString = ...

    }

次にendElement(){内

     check if matches your type and if so use myValueString;
于 2012-08-06T17:37:41.413 に答える