Added BinaryXMLElementReader
diff --git a/ndn-cpp/c/encoding/BinaryXMLElementReader.c b/ndn-cpp/c/encoding/BinaryXMLElementReader.c
new file mode 100644
index 0000000..9561026
--- /dev/null
+++ b/ndn-cpp/c/encoding/BinaryXMLElementReader.c
@@ -0,0 +1,48 @@
+/**
+ * @author: Jeff Thompson
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "BinaryXMLElementReader.h"
+
+ndn_Error ndn_BinaryXMLElementReader_onReceivedData
+  (struct ndn_BinaryXMLElementReader *self, unsigned char *data, unsigned int dataLength)
+{
+  // Process multiple objects in the data.
+  while(1) {
+    // Scan the input to check if a whole binary XML object has been read.
+    ndn_BinaryXMLStructureDecoder_seek(&self->structureDecoder, 0);
+    
+    ndn_Error error;
+    if (error = ndn_BinaryXMLStructureDecoder_findElementEnd(&self->structureDecoder, data, dataLength))
+      return error;
+    if (self->structureDecoder.gotElementEnd) {
+      // Got the remainder of an element.  Report to the caller.
+#if 0 // TODO: implement saving data parts.
+      this.dataParts.push(data.subarray(0, this.structureDecoder.offset));
+      var element = DataUtils.concatArrays(this.dataParts);
+      this.dataParts = [];
+#endif
+      (*self->elementListener->onReceivedElement)(self->elementListener, data, self->structureDecoder.offset);
+        
+      // Need to read a new object.
+      data += self->structureDecoder.offset;
+      dataLength -= self->structureDecoder.offset;
+      ndn_BinaryXMLStructureDecoder_init(&self->structureDecoder);
+      if (dataLength == 0)
+        // No more data in the packet.
+        return 0;
+            
+      // else loop back to decode.
+    }
+    else {
+#if 0 // TODO: implement saving data parts.
+      // Save for a later call to concatArrays so that we only copy data once.
+      this.dataParts.push(data);
+#else
+      return -1; // TODO: implement saving data parts.
+#endif
+      return 0;
+    }
+  }      
+}
\ No newline at end of file