从blackberry中的另一个XML字符串提取嵌入的XML并在blackberry中解码XML

从blackberry中的另一个XML字符串提取嵌入的XML并在blackberry中解码XML,blackberry,xml-parsing,decoding,Blackberry,Xml Parsing,Decoding,我正在blackberry中使用xml。 我目前正在处理一个xml字符串,其中一个值是另一个xml字符串。 问题在于,虽然其他值被整齐地提取出来,但xml值却没有。 只有“行- 我想我不妨回答我自己的问题: if (xmlData.indexOf("<?xml version="1.0" encoding="UTF-"?>") != -1 && xmlData.

我正在blackberry中使用xml。 我目前正在处理一个xml字符串,其中一个值是另一个xml字符串。 问题在于,虽然其他值被整齐地提取出来,但xml值却没有。 只有“行- 我想我不妨回答我自己的问题:

if (xmlData.indexOf("<?xml version="1.0" 
    encoding="UTF-"?>") != -1 && 
    xmlData.indexOf("</Crossword>") != -1) 
{
    xmlEmbeddedData = xmlData.substring(
          xmlData.indexOf("&lt;?xml version=&quot;1.0&quot; 
                      encoding=&quot;UTF-8&quot;?&gt;"),xmlData.indexOf("</Crossword>"));
}
if(xmlData.indexOf(“?xml version=“1.0”)
encoding=“UTF-”?“”!=-1&&
xmlData.indexOf(“”!=-1)
{
xmlEmbeddedData=xmlData.substring(
xmlData.indexOf(“?xml version=“1.0”
encoding=“UTF-8”“”,xmlData.indexOf(“”);
}
上面,我通过简单地从两个索引之间的响应数据中提取字符串来提取嵌入的xml。。。 下面我用适当的值替换了<

System.out.println("embedded--->" + xmlEmbeddedData);
    xmlEmbeddedData = replace(xmlEmbeddedData, "&lt;", "<", true);
    xmlEmbeddedData = replace(xmlEmbeddedData, "&gt;", ">", true);
    xmlEmbeddedData = replace(xmlEmbeddedData, "&amp;", "&", true);
    xmlEmbeddedData = replace(xmlEmbeddedData, "&quot;", "\"", true);
    xmlEmbeddedData = replace(xmlEmbeddedData, "\n", "", true);
System.out.println(“嵌入式-->”+xmlEmbeddedData);
xmlEmbeddedData=replace(xmlEmbeddedData,“,”,true);
xmlEmbeddedData=replace(xmlEmbeddedData,“&;”,“&;”,true);
xmlEmbeddedData=replace(xmlEmbeddedData,“”,“\”,true);
xmlEmbeddedData=replace(xmlEmbeddedData,“\n”,“true”);
这是替换功能:

static public String replace(String val, String fnd, String rpl,
        boolean igncas) {
    int fl = (fnd == null ? 0 : fnd.length());

    if (fl > 0 && val.length() >= fl) {
        StringBuffer sb = null; // string buffer
        int xp = 0; // index of previous fnd

        for (int xa = 0, mi = (val.length() - fl); xa <= mi; xa++) {
            if (val.regionMatches(igncas, xa, fnd, 0, fl)) {
                if (xa > xp) {
                    sb = append(sb, val.substring(xp, xa));
                } // substring uses private construct which does not dup
                // char[]
                sb = append(sb, rpl);
                xp = (xa + fl);
                xa = (xp - 1); // -1 to account for loop xa++;
            }
        }

        if (sb != null) {
            if (xp < val.length()) {
                sb.append(val.substring(xp, val.length()));
            } // substring uses private construct which does not dup char[]
            return sb.toString();
        }
    }
    return val;
}
静态公共字符串替换(字符串val、字符串fnd、字符串rpl、,
布尔值(igncas){
int fl=(fnd==null?0:fnd.length());
如果(fl>0&&val.length()>=fl){
StringBuffer sb=null;//字符串缓冲区
int xp=0;//上一个fnd的索引
对于(int xa=0,mi=(val.length()-fl);xa xp){
sb=附加(sb,val.substring(xp,xa));
}//子字符串使用不重复的私有构造
//字符[]
sb=附加(sb,rpl);
xp=(xa+fl);
xa=(xp-1);//-1表示循环xa++;
}
}
如果(sb!=null){
如果(xp
最后一点:嵌入的xml字符串位于CDATA中。
InputStream inStream = http.openInputStream();
        // Get the length and process the data
        int len = (int) http.getLength();
        if (len > 0) 
        {
            int actual = 0;
            int bytesread = 0;
            byte[] data = new byte[len];
            while ((bytesread != len) && (actual != -1)) {
                actual = inStream.read(data, bytesread, len - bytesread);
                bytesread += actual;
            }
            String recd = new String(data, "UTF-8");
            responseData = recd;
  response:::::<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas  .xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.o  rg/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://sche  mas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:glwsdl"><SOAP-ENV:Body><return xsi:type="SOAP-ENC:Arr  ay" SOAP-ENC:arrayType="tns:CrosswordItem[1]"><item xsi:type="tns:CrosswordItem"><Date xsi:type="xsd  :string">2012-01-04</Date><Crossword xsi:type="xsd:stri  ng">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;crossword size=&quot;7&quot;&gt;
&lt;grid&gt;

&lt;cell position=&quot;5_6&quot; value=&quot;&amp;#xAB0;&amp;#xABE;&quot;/&gt;
&lt;cell position=&quot;6_6&quot; value=&quot;&amp;#xAA8;&quot;/&gt;
&lt;/grid&gt;
&lt;horizontalkeys&gt;
&lt;key number=&quot;19&quot; position=&quot;3_6&quot; length=&quot;4&quot;   answer=&quot;&amp;#xA9  C;&amp;#xABE;&amp;#xAAB;&amp;#xAB0;&amp;#xABE;&amp;#xAA8;&quot;  question=&quot;&amp;#xA95;&amp;#xAC7  ;&amp;#xAB8;&amp;#xAB0;&quot;/&gt;
&lt;/horizontalkeys&gt;
&lt;verticalkeys&gt;
&lt;key number=&quot;17&quot; position=&quot;6_5&quot; length=&quot;2&quot;   answer=&quot;&amp;#xAA  E;&amp;#xABE;&amp;#xAA8;&quot; question=&quot;&amp;#xA86;&amp;#xAAC;&amp;#xAB0;&amp;#xAC2;, &amp;#xA  AA;&amp;#xACD;&amp;#xAB0;&amp;#xAA4;&amp;#xABF;&amp;#xA  B7;&amp;#xACD;&amp;#xAA0;&amp;#xABE;&quot;/&gt;
&lt;/verticalkeys&gt;
&lt;/crossword&gt;
</Crossword><Gridsize xsi:type="xsd:string">7</Gridsize><Id      xsi:type="xsd:string">63</Id></item></re  turn></SOAP-ENV:Body></SOAP-ENV:Envelope>
xmlEmbeddedData = xmlData.substring(xmlData.indexOf("&lt;?xml     version=&quot;1.0&quot;encoding=&quot;UTF-8&quot;?&gt;"),                           xmlData.indexOf("</Crossword>"));
if (xmlData.indexOf("&lt;?xml version=&quot;1.0&quot; 
    encoding=&quot;UTF-&quot;?&gt;") != -1 && 
    xmlData.indexOf("</Crossword>") != -1) 
{
    xmlEmbeddedData = xmlData.substring(
          xmlData.indexOf("&lt;?xml version=&quot;1.0&quot; 
                      encoding=&quot;UTF-8&quot;?&gt;"),xmlData.indexOf("</Crossword>"));
}
System.out.println("embedded--->" + xmlEmbeddedData);
    xmlEmbeddedData = replace(xmlEmbeddedData, "&lt;", "<", true);
    xmlEmbeddedData = replace(xmlEmbeddedData, "&gt;", ">", true);
    xmlEmbeddedData = replace(xmlEmbeddedData, "&amp;", "&", true);
    xmlEmbeddedData = replace(xmlEmbeddedData, "&quot;", "\"", true);
    xmlEmbeddedData = replace(xmlEmbeddedData, "\n", "", true);
static public String replace(String val, String fnd, String rpl,
        boolean igncas) {
    int fl = (fnd == null ? 0 : fnd.length());

    if (fl > 0 && val.length() >= fl) {
        StringBuffer sb = null; // string buffer
        int xp = 0; // index of previous fnd

        for (int xa = 0, mi = (val.length() - fl); xa <= mi; xa++) {
            if (val.regionMatches(igncas, xa, fnd, 0, fl)) {
                if (xa > xp) {
                    sb = append(sb, val.substring(xp, xa));
                } // substring uses private construct which does not dup
                // char[]
                sb = append(sb, rpl);
                xp = (xa + fl);
                xa = (xp - 1); // -1 to account for loop xa++;
            }
        }

        if (sb != null) {
            if (xp < val.length()) {
                sb.append(val.substring(xp, val.length()));
            } // substring uses private construct which does not dup char[]
            return sb.toString();
        }
    }
    return val;
}