Ejemplo n.º 1
0
 public void onCData(XmlCData xmlCData)
 {
     foreach (XmlStreamer xmlStreamer in xmlStreamers)
     {
         xmlStreamer.onCData(xmlCData);
     }
 }
Ejemplo n.º 2
0
        private async Task <XmlCData> readXmlCData()
        {
            XmlCData xmlCData = new XmlCData();
            int      dataRef  = buffer.getInt();

            if (dataRef > 0)
            {
                xmlCData.setData(stringPool.get(dataRef));
            }
            xmlCData.setTypedData(await ParseUtils.readResValue(buffer, stringPool));
            if (xmlStreamer != null)
            {
                //TODO: to know more about cdata. some cdata appears buffer xml tags
                //            String value = xmlCData.toStringValue(resourceTable, locale);
                //            xmlCData.setValue(value);
                //            xmlStreamer.onCData(xmlCData);
            }
            return(xmlCData);
        }
Ejemplo n.º 3
0
 public void onCData(XmlCData xmlCData)
 {
     appendShift(shift);
     sb.Append(xmlCData.getValue()).Append('\n');
     isLastStartTag = false;
 }
Ejemplo n.º 4
0
        /**
         * Parse binary xml.
         */
        public async Task parse()
        {
            ChunkHeader chunkHeader = await readChunkHeader();

            if (chunkHeader == null)
            {
                return;
            }
            if (chunkHeader.getChunkType() != ChunkType.XML && chunkHeader.getChunkType() != ChunkType.NULL)
            {
                // notice that some apk mark xml header type as 0, really weird
                // see https://github.com/clearthesky/apk-parser/issues/49#issuecomment-256852727
                return;
            }

            // read string pool chunk
            chunkHeader = await readChunkHeader();

            if (chunkHeader == null)
            {
                return;
            }
            ParseUtils.checkChunkType(ChunkType.STRING_POOL, chunkHeader.getChunkType());
            stringPool = await ParseUtils.readStringPool(buffer, (StringPoolHeader)chunkHeader);

            // read on chunk, check if it was an optional XMLResourceMap chunk
            chunkHeader = await readChunkHeader();

            if (chunkHeader == null)
            {
                return;
            }
            if (chunkHeader.getChunkType() == ChunkType.XML_RESOURCE_MAP)
            {
                long[] resourceIds = readXmlResourceMap((XmlResourceMapHeader)chunkHeader);
                resourceMap = new string[resourceIds.Length];
                for (int i = 0; i < resourceIds.Length; i++)
                {
                    resourceMap[i] = await Attribute_.AttrIds.getString(resourceIds[i]);
                }
                chunkHeader = await readChunkHeader();
            }

            while (chunkHeader != null)
            {
                /*if (chunkHeader.chunkType == ChunkType.XML_END_NAMESPACE) {
                 *  break;
                 * }*/
                long beginPos = buffer.position();
                switch (chunkHeader.getChunkType())
                {
                case ChunkType.XML_END_NAMESPACE:
                    XmlNamespaceEndTag xmlNamespaceEndTag = readXmlNamespaceEndTag();
                    xmlStreamer.onNamespaceEnd(xmlNamespaceEndTag);
                    break;

                case ChunkType.XML_START_NAMESPACE:
                    XmlNamespaceStartTag namespaceStartTag = readXmlNamespaceStartTag();
                    xmlStreamer.onNamespaceStart(namespaceStartTag);
                    break;

                case ChunkType.XML_START_ELEMENT:
                    XmlNodeStartTag xmlNodeStartTag = await readXmlNodeStartTag();

                    break;

                case ChunkType.XML_END_ELEMENT:
                    XmlNodeEndTag xmlNodeEndTag = readXmlNodeEndTag();
                    break;

                case ChunkType.XML_CDATA:
                    XmlCData xmlCData = await readXmlCData();

                    break;

                default:
                    if (chunkHeader.getChunkType() >= ChunkType.XML_FIRST_CHUNK &&
                        chunkHeader.getChunkType() <= ChunkType.XML_LAST_CHUNK)
                    {
                        Buffers.skip(buffer, chunkHeader.getBodySize());
                    }
                    else
                    {
                        throw new ParserException("Unexpected chunk type:" + chunkHeader.getChunkType());
                    }
                    break;
                }
                buffer.position((int)(beginPos + chunkHeader.getBodySize()));
                chunkHeader = await readChunkHeader();
            }
        }
Ejemplo n.º 5
0
 public void onCData(XmlCData xmlCData)
 {
 }